Have your tried using OxyClean?
launder it with bleach or if it is a color with another bleach alternative. Hang in the sun. You can also boil cottons in a pan on the stove.
I would use a hydrogen based whitener such as Oxyclean, the Dollar Tree has an equivalent version for $1. To start with I would soak it in a concentrated mixture in water either in the washer or the sink & then launder as usual.
Rub a crushed aspirin mixed with water on the stain. Let dry then launder.