Yo la dejaría así:
Código MySQL:
Ver originalDELIMITER//
SET cantidad
= cantidad
+ vcantidad
DELIMITER;
El resto del código es superfluo.
El problema central es que estabas usando el mismo nombre (cantidad) para la variable de entrada que para el campo, y eso hace que MySQL confunda cuál debe usar. Como el campo tiene mayor jerarquía lógica, entonces lo que hace es usar el propio valor del campo para ponerselo... al mismo campo.
No uses los mismos nombres en las variables que en los objetos de la base.