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

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
mod = 10 ** 9 + 7
n = 3 * 10 ** 5  # 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)
#一つの配置でK C 2本の線
#配置はMN C K 通り
#よって、MNCK * KC2 / MNC2 = (MN - 2)C(K - 2)回
#各2頂点間のコストは足される。
#答えは全ての2頂点間のコストの和 * (MN - 2)C(K - 2)

#全ての2頂点間のコストの和を求める
#距離 i 離れた二点の個数は (1 + 2 + ... N - i) * N
#つまり、N * (N - i + 1) * (N - i) / 2
#縦横あるので、 それぞれ足す
ans1 = 0
for i in range(1, M):
  ans1 += i * (M - i) % mod
  #print(ans1)
ans1 = (ans1 * N * N) % mod

ans2 = 0
for i in range(1, N):
  ans2 += i * (N - i) % mod
ans2 = (ans2 * M * M) % mod

#print(ans1, ans2)

ans = ans1 + ans2
print(ans * cmb(M * N - 2, K - 2, p) % mod)
 N, M, K = map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split M K 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 mod = 10 ** 9 + 7 mod 10 ** 9 + 7 10 ** 9 10 9 7 n = 3 * 10 ** 5 n 3 * 10 ** 5 3 10 ** 5 10 5 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)
#一つの配置でK C 2本の線
#配置はMN C K 通り
#よって、MNCK * KC2 / MNC2 = (MN - 2)C(K - 2)回
#各2頂点間のコストは足される。
#答えは全ての2頂点間のコストの和 * (MN - 2)C(K - 2)

#全ての2頂点間のコストの和を求める
#距離 i 離れた二点の個数は (1 + 2 + ... N - i) * N
#つまり、N * (N - i + 1) * (N - i) / 2
#縦横あるので、 それぞれ足す 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 ans1 = 0 ans1 0 for i in range(1, M):
  ans1 += i * (M - i) % mod
  #print(ans1) i range(1, M) range 1 M ans1 += i * (M - i) % mod ans1 i * (M - i) % mod i * (M - i) i M - i M i mod ans1 = (ans1 * N * N) % mod ans1 (ans1 * N * N) % mod ans1 * N * N ans1 * N ans1 N N mod ans2 = 0 ans2 0 for i in range(1, N):
  ans2 += i * (N - i) % mod i range(1, N) range 1 N ans2 += i * (N - i) % mod ans2 i * (N - i) % mod i * (N - i) i N - i N i mod ans2 = (ans2 * M * M) % mod ans2 (ans2 * M * M) % mod ans2 * M * M ans2 * M ans2 M M mod ans = ans1 + ans2 ans ans1 + ans2 ans1 ans2 print(ans * cmb(M * N - 2, K - 2, p) % mod) print ans * cmb(M * N - 2, K - 2, p) % mod ans * cmb(M * N - 2, K - 2, p) ans cmb(M * N - 2, K - 2, p) cmb M * N - 2 M * N M N 2 K - 2 K 2 p mod N, M, K = map(int, input().split()) map(int, input().split()) N M, K = map(int, input().split()) map(int, input().split()) M inv = [0, 1] [0, 1] inv ans1 = 0 0 ans1 p = 10 ** 9 + 7 10 ** 9 + 7 p ans2 = (ans2 * M * M) % mod (ans2 * M * M) % mod ans2 ans2 += i * (N - i) % mod i * (N - i) % mod ans2 n = 3 * 10 ** 5 3 * 10 ** 5 n fact = [1, 1] [1, 1] fact ans1 = (ans1 * N * N) % mod (ans1 * N * N) % mod ans1 factinv = [1, 1] [1, 1] factinv ans1 += i * (M - i) % mod i * (M - i) % mod ans1 ans = ans1 + ans2 ans1 + ans2 ans K = map(int, input().split()) map(int, input().split()) K ans2 = 0 0 ans2 mod = 10 ** 9 + 7 10 ** 9 + 7 mod 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
N, M, K = map(int, input().split())

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
mod = 10 ** 9 + 7
n = 3 * 10 ** 5  # 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)
#一つの配置でK C 2本の線
#配置はMN C K 通り
#よって、MNCK * KC2 / MNC2 = (MN - 2)C(K - 2)回
#各2頂点間のコストは足される。
#答えは全ての2頂点間のコストの和 * (MN - 2)C(K - 2)

#全ての2頂点間のコストの和を求める
#距離 i 離れた二点の個数は (1 + 2 + ... N - i) * N
#つまり、N * (N - i + 1) * (N - i) / 2
#縦横あるので、 それぞれ足す
ans1 = 0
for i in range(1, M):
  ans1 += i * (M - i) % mod
  #print(ans1)
ans1 = (ans1 * N * N) % mod

ans2 = 0
for i in range(1, N):
  ans2 += i * (N - i) % mod
ans2 = (ans2 * M * M) % mod

#print(ans1, ans2)

ans = ans1 + ans2
print(ans * cmb(M * N - 2, K - 2, p) % mod)

