It's a good idea to use the dimension as branches. Though you need to configure more to separate logins for branches.
Let's say bring the dimension to users table and add the dimensions to related users. And keep the super admin for main branch. And create permissions for branch company access. And customize the dimensions drop down. Like show the dimensions drop down only for admins. Other branch users doesn't see the dimensions drop down. And bring the audit trail log to connect and split the entries as per branches. And also you need to change the references function to use dimensions id in l entries. So you can get the difference as per branch.
While writing it's easy to say. But in programmatic. There are huge changes in the core level to make it work. But it's definitely workable idea to bring the branches inside one main company. Admin can login and make entries into any branches. But the branch users can login and make entry into one system.
And remember one main factor. If you are making 40 branches and making entries means more concurrent user activity in it everyday. So you need a good server to handle it. And write each queries carefully to make the system work without load. Maintain regular backup as well.