Python 2, 135135 128 bytes
This takes a Python type list from stdin:
r=input()
m=r[0]
c=[-1]*r[0]
for a in r:
for b in range(a):c[b]+=1
s=1
y=0
for a in r:
for x in range(a):s*=a-x+c[x]-y
y+=1
print s
This is a very canonical implementation, but I haven't come up with anything much smarter so far. I have a feeling that there will be much shorter solutions even with "real" programming languages.
We get the number of boxes in each row as input. This solution first counts the number of boxes in each column, which is stored in c
(it's actually the count minus 1 to simplify its usage in the later calculation). Then it iterates over all boxes, and multiplies the hook lengths. The hook length itself is trivial to calculate once you have the count of boxes in each row and column.