First, as a note, these days in Matlab, with JIT compilation, vector code is not necessarily faster / better. For larger problems, using memory in particular can cause performance problems.
However, here is a vector solution that seems to give the same results as your code:
A=rand(3,4,5,6,7); B=rand(5,1); C=rand(6,1); D=rand(7,1); s=size(A); [b,c,d]=ndgrid(B,C,D); F=b.*c.*d; G=zeros(1,1,prod(s(3:5))); G(1,1,:)=F(:); A=reshape(A,s(1),s(2),[]); A=bsxfun(@times,A,G); A=reshape(A,s);
EDIT: alternative solution:
A=bsxfun(@times,A,permute(B,[2 3 1])); A=bsxfun(@times,A,permute(C,[2 3 4 1])); A=bsxfun(@times,A,permute(D,[2 3 4 5 1]));