First thing I'd do is dump an image of the flash drive.... linux based, since I never can find 'dd' on windows when I need it...
dd if=/dev/sdX of=whopping_big_file.img bs=1M
(Replace the sdX with the proper drive/device identifier) Let it finish! It'll take a while, considering it's a 16GB drive. This will create a (hopefully) 16GB file on your system, containing the data from every block.
Go put the original flash drive away in a safe place for now...
You can use several of linux's tools to attempt recovery, including file-system checkers, although you'll need some wizardry to eke out the partition(s) from the image file (search for loop device mounting).
One tool I've used that is tuned for finding documents, pictures and other relatively strongly identifiable files is 'magicrescue... it scans the blocks, looking for magic header bytes which signal the start of a particular type of file, png, jpg, gif, doc, pdf... etc. it saves it to your drive and you can review them to figure out what's good or not.
There are some other programs similar, of course there's a plethora of "we'll take your money" ones too... Patience is the key really. The data's most likely there... it's just going to take a while to scan 16GB of data.
MAKE A BACKUP COPY/IMAGE FIRST nothing is more important.
I was able to recover all 500+ pages of a client's book in this manner. Very grateful man. I then taught him about offsite backups... (nothing implied)