Just as a basic starting point...
I'd take the scan and duplicate the layer and set the duplicate's blending mode to Multiply
. Then repeatedly duplicate the duplicate. This will darken everything with each new duplicate. Repeat until you feel you've reached a general medium.
Then add a levels
adjustment layer to tweak some values, decreasing mid-tones a bit, bringing up shadows, dropping highlights.

From here, I'd focus on individual pieces.
Why not simply use Levels/Curves adjustment rather than duplicating a multiply layer?
While a simple Levels adjustment may get you close to the results the multiply layers get you, there's a difference.
When multiply layers are used, they duplicate layers react based upon underlying pixel values. Whereas a levels adjustment merely alters existing pixel values. The build up of values is more subtle and tonal with the multiply layers. Rather than sweeping adjustments to all pixels, only pixels which can be darkened, based upon that pixels value, are darkened.
This is a common technique for darkening a faded, or partially transparent image in order to get closer to 100% values for the pixel.
Even given this... I'll be honest, in my opinion, removing the inherent grain found in the images will be exceptionally difficult.
I do not know that a high quality reproduction would be possible without painstakingly painting in some colors manually. Similar to fixing that scar down the middle of the center column - it's going to require dedicated manual attention.
:)