You are not sending any KEYEVENTF_KEYUP events in between each keystroke, eg:
keybd_event(0x09, 0, 0, 0);
keybd_event(0x09, KEYEVENTF_KEYUP, 0, 0);
keybd_event(0x09, 0, 0, 0);
keybd_event(0x09, KEYEVENTF_KEYUP, 0, 0);
keybd_event(0x09, 0, 0, 0);
keybd_event(0x09, KEYEVENTF_KEYUP, 0, 0);
That being said, keybd_event() is decremented, you should be using SendInput() instead (see Send keys through SendInput in user32.dll), eg:
INPUT input = new INPUT {
    Type = 1
};
input.Data.Keyboard = new KEYBDINPUT() {
    Vk = 0x09,
    Scan = 0,
    Flags = 0,
    Time = 0,
    ExtraInfo = IntPtr.Zero,
};
INPUT input2 = new INPUT {
    Type = 1
};
input2.Data.Keyboard = new KEYBDINPUT() {
    Vk = 0x09,
    Scan = 0,
    Flags = 2,
    Time = 0,
    ExtraInfo = IntPtr.Zero
};
INPUT[] inputs = new INPUT[] { input, input2, input, input2, input, input2 };
SendInput(6, inputs, Marshal.SizeOf(typeof(INPUT)));
Or, you can use SendKeys() instead, eg:
SendKeys.Send("{TAB}{TAB}{TAB}");