I'm using 3CX the past four/five years without any issues.
3CX runs in a Windows 2012R2 virtual machine on 2012R2 Hyper-V.
I am using multiple VOIP providers
For incoming calls I am using pre-paid SIP accounts with a Dutch provider CheapConnect. I had my original local ISDN numbers once ported from KPN to this provider, which nowadays is a fairly simple process.
Outgoing calls are normally routed through provider InterVoip, which have the cheapest call rates even if you call a Dutch local number. However, emergency and paycalls (14xxxx, 0900-numbers and others) I have those routed through the CheapConnect numbers as these cannot be called from 'abroad'.
With my Internet provider Ziggo comes also a telephone number, which is some propriety VOIP. I am using a Cisco SPA 3102 gateway to pick-up the number from the Ziggo modems POTS port, put it on my internal network and then connect it as a SIP number into the 3CX. If I call another Ziggo number I route that through that line as Ziggo to Ziggo calls are free (as me being Dutch ...
)
At home on the internal network I am using a variety of Cisco, Linksys and Grandstream VOIP phones. Cisco's are SPA-525g2s and WIP 310 WiFi handhelds, Grandstreams come with WebCams (GVX 3140 and 3175).
Nowadays all phones come with a web page. This allows you to remotely configure and manage one-by-one. You can use 3CX to remotely manage them (called provisioning). At first I had a number of Cisco 79xx phones, but those are more difficult to manage as you need TFTP to push initial configuration files to the phones. Also, SIP firmware and updates are not easy to get if you do not have access to Cisco's support.
3CX itself comes with a free version besides the demo version. This allows you to run at least two calls at the same time. Next are the paid versions which adds more functions. I myself am using a standard version as this gives me some functions I am using at home.
Roel