Disttributing call in Asterisk

Hi Everyone,

I have 3 provider. If 1 provider fails I use other provider for calling.

exten => _X.,2,Dial(SIP/${EXTEN}@vitel-outbound,tTo)
exten => _X.,3,GotoIf($["${DIALSTATUS}" = “ANSWERED | DONTCALL| TORTURE | BUSY”]?7:4)
exten => _X.,4,Dial(SIP/${EXTEN}@gafachi,tTo)
exten => _X.,5,GotoIf($["${DIALSTATUS}" = "ANSWERED| DONTCALL| TORTURE | BUSY "]?7:6)
exten => _X.,6,Dial(SIP/${EXTEN}@voipstreet,tTo)
exten => _X.,7,Hangup()

but I want calls to be distributed to all 3 provider. Say if my first call use vitelity next call should use gafachi and next should use voipstreet. I want it to be a cycle so all three provider are used. I am not sure how to achieve it. Any help will be appreciated.