So you're not saving anything doing this route, if anything it costs more since you're paying for 3CX or hosting, plus your SIP trunks/dialtone, PLUS your Microsoft Teams Phone System licences. The reason we use it is because Teams Phone System is extremely basic. We manipulate caller ID, so for example, if I call a phone number in area code 902, it shows our local 902 number on the outbound caller ID, where calling someone in 604 shows our 604 number. Dialing *8 before a number forces it to show our local 416 number even if it's a 902 number. When managers call out, it shows their DID and their full name, but when call centre staff calls out it shows our main line and our company name on the outbound caller ID.
Call queues are more advanced as well which is the other reason we use it. Teams is super basic for that, but 3CX has the switchboard and lets you manipulate the calls more. You can also do more complex IVR's with 3CX such as deeper menus or even logic like having the customer type in their account # and it looks it up elsewhere, stuff like that.
For us it's the best of both worlds, as I like 3CX as a PBX but I hate the 3CX softphone and web interface and find the quality poor. When using Teams with 3CX the call quality is night and day different for some reason. We use these headsets (can't recall the name off hand) but they are the ones that make sound by vibrating against your ear bone or whatever, and they sound WAY better on Teams for some reason over Bluetooth, as the 3CX app was very tinny.
We use Teams for most our calls with customers as everyone just does video calls now so we don't really do a whole ton of PSTN calling, so it's MUCH easier just using 1 app being Teams for all calls. It's much easier for new employees as well as less for them to manage and learn, plus everyone already has Teams on their laptops and cell phones and there's no provisioning needed at all.