Looking at your design, here’s what I’d do pretty quickly.
ISP A → 2216 no. 1
ISP B → 2216 no. 2
Customers → 2216 no. 3 (& 4?)
2216 nos. 1, 2, & 3 (& 4) all connected via backbone.
Internet comes into border routers. Borders may aggregate all routes between each other, or may feed into a central core where all routes learned via BGP are combined.
Customers generally meet at edge routers. Edge routers then feed into aggregation routers, which can be regional or at the core. Functions such as CGNAT, PPPoE, MPLS, queuing, etc. are handled in the core. Your core can be a single router handling multiple functions, or a stack of routers each performing separate functions. The manipulated (i.e. Internet-ready) customer traffic is then handed to the BGP routers.
When you’re small, it’s not uncommon to have just a couple of routers that do everything, but doing that begins to complicate the configuration and makes redundancy difficult. If you’re planning to grow, it’s best to start separating responsibilities, as explained in the links the others have referred to already.
2216 nos. 1 & 2 are your borders. The third 2216 is a customer-facing edge. As already suggested, move all customers off 2216 no. 2 to a separate router, possibly another 2216. If you don’t need the CPU horsepower (i.e. no queueing or MPLS/VXLAN tagging), a CRS can route in hardware. The switches that most closely match your 2216’s port capacity are the CRS317, CRS510, and CRS518.
Depending on your backbone utilization, if customers don’t need more than 10Gbps handoff, I’d use one or more CRS317’s to face customers, with 2 or 3 10Gbps links LAG’d back to a 2116 or 2216, and possibly another aggregation switch in between. If you expect a huge amount of growth quickly, then use CRS510 or CRS518 to face the customers and uplink to a 2216 over the 100G ports, or LAG a couple 25G ports and use the 100G ports as cross connects between the 2216’s.
(I love designing this stuff. My forum profile has my contact info, should you feel so inclined.)