Можно просто compare output в режиме toggle для трёх каналов таймера сделать и гонять таймер по кругу. В прерывании по срабатыванию compare каждого канала тупо прибавлять к его значению требуемый период до следующего изменения уровня. Даже ничего на перекручивании по переполнению таймера придумывать не нужно - значения у каналов точно так же переполняются и всё корректно работает.