"""
基本の方針は「各マンハッタン距離が何回足されるか」という考え方で距離の値を積み上げて行けばよい

まず、XとYは独立に考えることにする。
X軸の距離の方から積み上げる。
X1とX2の距離が足される回数は、
A.X1の列とX2の列の座標の組み合わせの数　×　B.その組み合わせが含まれるような座標の組み合わせの数
である。
A　＝　行数**２
B　＝　CMB(N*M-2 , K-2)である

同様の計算をY軸に関しても行えばよい。
"""
def cmb(n, r, p):
    if (r < 0) or (n < r):
        return 0
    r = min(r, n - r)
    return fact[n] * factinv[r] * factinv[n-r] % p

p = 10 ** 9 + 7
N = 10 ** 6  # N は必要分だけ用意する
fact = [1, 1]  # fact[n] = (n! mod p)
factinv = [1, 1]  # factinv[n] = ((n!)^(-1) mod p)
inv = [0, 1]  # factinv 計算用
 
for i in range(2, N + 1):
    fact.append((fact[-1] * i) % p)
    inv.append((-inv[p % i] * (p // i)) % p)
    factinv.append((factinv[-1] * inv[-1]) % p)

N,M,K = map(int,input().split())

ans = 0

#X軸の距離を考える
A = M*M
B = cmb(N*M-2,K-2,p)
for i in range(1,N):
    ans += ((i*i)-(i-1+0)*i//2)*A*B%p
    ans %= p

#Y軸の距離を考える
A = N*N
B = cmb(N*M-2,K-2,p)
for i in range(1,M):
    ans += ((i*i)-(i-1+0)*i//2)*A*B%p
    ans %= p

print(ans) """
基本の方針は「各マンハッタン距離が何回足されるか」という考え方で距離の値を積み上げて行けばよい

まず、XとYは独立に考えることにする。
X軸の距離の方から積み上げる。
X1とX2の距離が足される回数は、
A.X1の列とX2の列の座標の組み合わせの数　×　B.その組み合わせが含まれるような座標の組み合わせの数
である。
A　＝　行数**２
B　＝　CMB(N*M-2 , K-2)である

同様の計算をY軸に関しても行えばよい。
""" def cmb(n, r, p):
    if (r < 0) or (n < r):
        return 0
    r = min(r, n - r)
    return fact[n] * factinv[r] * factinv[n-r] % p cmb if (r < 0) or (n < r):
        return 0
     (r < 0) or (n < r) r < 0 r 0 n < r n r return 0 0 r = min(r, n - r) r min(r, n - r) min r n - r n r return fact[n] * factinv[r] * factinv[n-r] % p fact[n] * factinv[r] * factinv[n-r] % p fact[n] * factinv[r] * factinv[n-r] fact[n] * factinv[r] fact[n] fact n factinv[r] factinv r factinv[n-r] factinv n-r n r p n n r r p p p = 10 ** 9 + 7 p 10 ** 9 + 7 10 ** 9 10 9 7 N = 10 ** 6 N 10 ** 6 10 6 fact = [1, 1] fact [1, 1] 1 1 factinv = [1, 1] factinv [1, 1] 1 1 inv = [0, 1] inv [0, 1] 0 1 for i in range(2, N + 1):
    fact.append((fact[-1] * i) % p)
    inv.append((-inv[p % i] * (p // i)) % p)
    factinv.append((factinv[-1] * inv[-1]) % p) i range(2, N + 1) range 2 N + 1 N 1 fact.append((fact[-1] * i) % p) fact.append fact append (fact[-1] * i) % p fact[-1] * i fact[-1] fact -1 i p inv.append((-inv[p % i] * (p // i)) % p) inv.append inv append (-inv[p % i] * (p // i)) % p -inv[p % i] * (p // i) -inv[p % i] inv[p % i] inv p % i p i p // i p i p factinv.append((factinv[-1] * inv[-1]) % p) factinv.append factinv append (factinv[-1] * inv[-1]) % p factinv[-1] * inv[-1] factinv[-1] factinv -1 inv[-1] inv -1 p N,M,K = map(int,input().split()) N map(int,input().split()) map int input().split() ().split () input split M K ans = 0 ans 0 A = M*M A M*M M M B = cmb(N*M-2,K-2,p) B cmb(N*M-2,K-2,p) cmb N*M-2 N*M N M 2 K-2 K 2 p for i in range(1,N):
    ans += ((i*i)-(i-1+0)*i//2)*A*B%p
    ans %= p

#Y軸の距離を考える i range(1,N) range 1 N ans += ((i*i)-(i-1+0)*i//2)*A*B%p ans ((i*i)-(i-1+0)*i//2)*A*B%p ((i*i)-(i-1+0)*i//2)*A*B ((i*i)-(i-1+0)*i//2)*A (i*i)-(i-1+0)*i//2 i*i i i (i-1+0)*i//2 (i-1+0)*i i-1+0 i-1 i 1 0 i 2 A B p ans %= p ans p A = N*N A N*N N N B = cmb(N*M-2,K-2,p) B cmb(N*M-2,K-2,p) cmb N*M-2 N*M N M 2 K-2 K 2 p for i in range(1,M):
    ans += ((i*i)-(i-1+0)*i//2)*A*B%p
    ans %= p i range(1,M) range 1 M ans += ((i*i)-(i-1+0)*i//2)*A*B%p ans ((i*i)-(i-1+0)*i//2)*A*B%p ((i*i)-(i-1+0)*i//2)*A*B ((i*i)-(i-1+0)*i//2)*A (i*i)-(i-1+0)*i//2 i*i i i (i-1+0)*i//2 (i-1+0)*i i-1+0 i-1 i 1 0 i 2 A B p ans %= p ans p print(ans) print ans B = cmb(N*M-2,K-2,p) cmb(N*M-2,K-2,p) B factinv = [1, 1] [1, 1] factinv ans += ((i*i)-(i-1+0)*i//2)*A*B%p ((i*i)-(i-1+0)*i//2)*A*B%p ans N = 10 ** 6 10 ** 6 N ans %= p p ans inv = [0, 1] [0, 1] inv fact = [1, 1] [1, 1] fact ans += ((i*i)-(i-1+0)*i//2)*A*B%p ((i*i)-(i-1+0)*i//2)*A*B%p ans B = cmb(N*M-2,K-2,p) cmb(N*M-2,K-2,p) B p = 10 ** 9 + 7 10 ** 9 + 7 p N,M,K = map(int,input().split()) map(int,input().split()) N A = M*M M*M A M,K = map(int,input().split()) map(int,input().split()) M ans %= p p ans ans = 0 0 ans def cmb(n, r, p):
    if (r < 0) or (n < r):
        return 0
    r = min(r, n - r)
    return fact[n] * factinv[r] * factinv[n-r] % p def cmb(n, r, p):
    if (r < 0) or (n < r):
        return 0
    r = min(r, n - r)
    return fact[n] * factinv[r] * factinv[n-r] % p cmb K = map(int,input().split()) map(int,input().split()) K A = N*N N*N A
"""
基本の方針は「各マンハッタン距離が何回足されるか」という考え方で距離の値を積み上げて行けばよい

まず、XとYは独立に考えることにする。
X軸の距離の方から積み上げる。
X1とX2の距離が足される回数は、
A.X1の列とX2の列の座標の組み合わせの数　×　B.その組み合わせが含まれるような座標の組み合わせの数
である。
A　＝　行数**２
B　＝　CMB(N*M-2 , K-2)である

同様の計算をY軸に関しても行えばよい。
"""
def cmb(n, r, p):
    if (r < 0) or (n < r):
        return 0
    r = min(r, n - r)
    return fact[n] * factinv[r] * factinv[n-r] % p

p = 10 ** 9 + 7
N = 10 ** 6  # N は必要分だけ用意する
fact = [1, 1]  # fact[n] = (n! mod p)
factinv = [1, 1]  # factinv[n] = ((n!)^(-1) mod p)
inv = [0, 1]  # factinv 計算用
 
for i in range(2, N + 1):
    fact.append((fact[-1] * i) % p)
    inv.append((-inv[p % i] * (p // i)) % p)
    factinv.append((factinv[-1] * inv[-1]) % p)

N,M,K = map(int,input().split())

ans = 0

#X軸の距離を考える
A = M*M
B = cmb(N*M-2,K-2,p)
for i in range(1,N):
    ans += ((i*i)-(i-1+0)*i//2)*A*B%p
    ans %= p

#Y軸の距離を考える
A = N*N
B = cmb(N*M-2,K-2,p)
for i in range(1,M):
    ans += ((i*i)-(i-1+0)*i//2)*A*B%p
    ans %= p

print(ans)
