Faits : A. A._ se trouve en détention provisoire depuis le 15 janvier 2016, sous les préventions notamment de viol, lésions corporelles qualifiées et menaces. Il lui est reproché d'avoir, le 26 août 2015, menacé son amie, la plaignante B._, au moyen d'un fusil à air comprimé, de lui avoir donné un coup de pied dans le tibia, de l'avoir saisie au cou et de l'avoir ensuite forcée à entretenir un relation sexuelle. Il est aussi mis en cause pour lui avoir adressé, entre le 26 août et le 20 décembre 2015, plusieurs messages comportant des menaces; le 20 décembre 2015, il lui aurait fait une clé de bras avec une matraque télescopique, l'aurait saisie par le cou, l'aurait menacée de son poing et l'aurait giflée à plusieurs reprises. Il lui est enfin fait grief d'avoir détenu dans son véhicule une carabine à air comprimé, une réplique de revolver ainsi qu'une boîte de plombs et de consommer régulièrement du cannabis. Par ordonnance du 15 janvier 2016, le Tribunal des mesures de contrainte du canton de Vaud a ordonné la détention de A._ pour trois semaines. Par la suite, la détention a été régulièrement prolongée par cette autorité, en dernier lieu par ordonnance du 29 juillet 2016 pour une durée de deux mois, soit jusqu'au 4 octobre 2016, en raison des risques de réitération et de passage à l'acte. Par arrêt du 17 août 2016, la Chambre des recours pénale du Tribunal cantonal du canton de Vaud (ci-après: le Tribunal cantonal) a rejeté le recours déposé par A._ contre cette ordonnance. Elle a retenu en substance l'existence de charges suffisantes ainsi qu'un risque de récidive qu'aucune mesure de substitution ne permettait de pallier. B. Agissant par la voie du recours en matière pénale, A._ demande principalement au Tribunal fédéral de réformer l'arrêt du 17 août 2016, en ce sens que sa libération immédiate est ordonnée, assortie de l'obligation de poursuivre son traitement thérapeutique, de façon ambulatoire et à raison d'une consultation par semaine, avec le Service de médecine et psychiatrie pénitentiaire. Il conclut à titre subsidiaire au renvoi de la cause à l'instance précédente pour nouvelle décision au sens des considérants. Il requiert encore l'assistance judiciaire. Le Tribunal cantonal et le Ministère public de l'arrondissement de l'Est vaudois renoncent à se déterminer et se réfèrent à l'arrêt attaqué.