Now to overcome this rule we have few options.
1. Run IGP.... hehe... Simple enough ? :-)
But problem with doing that is you need to redistributed BGP into IGP. If these are few BGP routes that not a big deal, but if we are talking about redistributing entire Global BGP Internet Routing Table... You gonna mess up with Your IGP, since IGPs are not designed to manage Route Tables this big.
2. Make BGP Peerings Full Mesh.
3. Route BGP updtes beteen EDGE BGP Devices of SP core using Tunnels such as GRE... of-course not a scalable solution though.
4. Run MPLS in the SP core and use concept of BGP free Core.
BTW... In most of the modern IOS "Synchronization" is off by Default.
1. Run IGP inside the domain.
2. Create Full Mesh Connectivity.
Since in our scenario, we don't have Full mesh connectivity, so lets turn of synchronization and Configure R3 as Route Reflectors(RR) first.
Route Reflectors and Confederations are two possible solutions BTW to overcome "BGP Rule of Split Horizon" which states that " One IBGP Learned Route Can not be advertised to another IBGP peer"
Lets Turn Sync off now and configure R3 as RR.