Massive stars are key sources of radiative, kinetic, and chemical feedback in the universe. Grids of massive star models computed by different groups each using their own codes, input physics choices and numerical approximations, however, lead to inconsistent results for the same stars. We use three of these 1D codes---GENEC, KEPLER and MESA---to compute non-rotating stellar models of $15~mathrm{M}_odot$, $20~mathrm{M}_odot$, and $25~mathrm{M}_odot$ and compare their nucleosynthesis. We follow the evolution from the main sequence until the end of core helium burning. The GENEC and KEPLER models hold physics assumptions used in large grids of published models. The MESA code was set up to use convective core overshooting such that the CO core masses are consistent with those obtained by GENEC. For all models, full nucleosynthesis is computed using the NuGrid post-processing tool MPPNP. We find that the surface abundances predicted by the models are in reasonable agreement. In the helium core, the standard deviation of the elemental overproduction factors for Fe to Mo is less than $30,%$---smaller than the impact of the present nuclear physics uncertainties. For our three initial masses, the three stellar evolution codes yield consistent results. Differences in key properties of the models, e.g., helium and CO core masses and the time spent as a red supergiant, are traced back to the treatment of convection and, to a lesser extent, mass loss. The mixing processes in stars remain the key uncertainty in stellar modelling. Better constrained prescriptions are thus necessary to improve the predictive power of stellar evolution models.