If you have a multi-input ADC and can have it select among inputs that are amplified by different amounts, that's generally the cleanest approach. In some cases, one might also adjust gain by scaling down the reference voltage to an ADC.
The effectiveness of those approaches, versus simply scaling up the values read from the ADC, will vary significantly based upon the ADC design. Some kinds of ADC have a noise floor which is independent of the strength of the incoming signal, but some kinds of converters, especially delta-sigma ones, have a noise floor which varies with signal amplitude. An ideal 16-bit converter would have an SNR of about 96dB on a full-strength signal, but that would drop to 48dB on a -48dB signal. A cheaper 16-bit converter designed for audio, by contrast, might have only a 60dB SNR on a full-strength signal but still manage a 36dB SNR on a -48dB signal (reducing the signal by 48dB would only reduce the SNR by 24dB). On such a converter, feeding in a signal at -12dB and multiplying the readings by four would yield results that were not as good as feeding in a clean signal that was 12dB higher, but may degrade the SNR by a lot less than 12dB.
The cleanest way to scale signals is to use analog scaling before the ADC. Scaling digitally won't be as good, but the amount of degradation will depend upon the kind of converter used, and may or may not be objectionable.