Does the following work ?
for a_param, b_param, c_param in zip(a.parameters(), b.parameters(),
                                               c.parameters()):
    # Don't use data of A and B params for the gradient to flow back to them
    # Use .copy_ here to change the value of the params of C, don't use .data to keep gradient flow
    c_param.copy_(weight * a_param + (1 - weight) * b_param)