You should keep in mind that the forward method in pytorch is actually executing this code every time you do a forward with a given input.
So setting the fc models to identity can be done only once in the __init__ as well.
The cat operation takes Tensors as input, not layers.
I think you meant something like, assuming x is the input for both model 2 and 3:
model2_out = self.model2(x)
model3_out = self.model3(x)

z = torch.cat([model2_out, model3_out], 1)

return dist, self.fc(z)