I have done this recently.
What you will likely find is that around the CRM 2011 to CRM 2013 stage, the upgrade will fail because the JavaScript is no longer compatible.
Here is what I did (backup at every step in case you need to step back):
Setup a DEV environment (I used VMware, you can create snapshots along the way)
Installed CRM 2011
Imported a copy of the CRM 4.0 database (import and upgrade)
In CRM 2011, exported all the JavaScript to external files (XrmToolBox works well for this)
I then stripped out the JavaScript code and removed plug-ins.
Did an in place upgrade to CRM 2013, took a VM snapshot, upgrade to CRM 2015, took a VM snapshot, etc. all the way to CRM 2016.
I then converted the JavaScript code to CRM2016 levels, and pasted that code back into the CRM 2016 Dev environment (there are tools out there that can help with this, both free and paid) here is a popular one: http://www.crmaccelerators.net/snapshot
Converted plug-in code and installed on DEV.
Updated SSRS reports (if required)
Created a CRM 2016 solution with updated field, form, view customizations, javascript and plug-ins.
My project was for CRM online so I had to migrate data. If this is all on-prem, I would recommend creating a new environment for CRM 2016.
For "live" update, either do an in place or on a staging environment, when you get the database to CRM 2016, move it to your new prod. Then move "fixed" solution of customizations from DEV to the new system.
Obviously these are just a summary of steps, I would recommend you take the time to make a detailed step by step plan, and update the doc as you go through a test upgrade.
Hope that helps!
Cheers
Nick