MapIndexed[{f1, f2, f3}[[Mod[First@#2, 3, 1]]][#1] &, data] does what you want (except that it goes over all 20 elements, which I assume is what you wanted). (thanks to Sjoerd for pointing out a silly inefficiency)