For very large setups we typically set up a gateway using Asterisk and/or OpenSIPs to distribute calls.
The method you describe will result in some logging issues because the termination of the call will possibly be logged more than once.
The trailing digit is mentioned a couple times in the forums already, but here it is again for you:
exten => _1NXXNXXXXX[0-2],1,AGI(
agi://127.0.0.1:4577/call_log)
exten => _1NXXNXXXXX[0-2],n,Dial(SIP/${EXTEN}@carrier1,,Tor)
exten => _1NXXNXXXXX[3-5],1,AGI(
agi://127.0.0.1:4577/call_log)
exten => _1NXXNXXXXX[3-5],n,Dial(SIP/${EXTEN}@carrier2,,Tor)
exten => _1NXXNXXXXX[6-9],1,AGI(
agi://127.0.0.1:4577/call_log)
exten => _1NXXNXXXXX[6-9],n,Dial(SIP/${EXTEN}@carrier3,,Tor)
This will distribute calls mostly proportional across the 3 carriers without logging issues.