# -*- coding: utf-8 -*-

#############
# Libraries #
#############

import sys
input = sys.stdin.readline

import math
#from math import gcd
import bisect
import heapq
from collections import defaultdict
from collections import deque
from collections import Counter
from functools import lru_cache

#############
# Constants #
#############

MOD = 10**9+7
INF = float('inf')
AZ = "abcdefghijklmnopqrstuvwxyz"

#############
# Functions #
#############

######INPUT######
def I(): return int(input().strip())
def S(): return input().strip()
def IL(): return list(map(int,input().split()))
def SL(): return list(map(str,input().split()))
def ILs(n): return list(int(input()) for _ in range(n))
def SLs(n): return list(input().strip() for _ in range(n))
def ILL(n): return [list(map(int, input().split())) for _ in range(n)]
def SLL(n): return [list(map(str, input().split())) for _ in range(n)]


#####Shorten#####
def DD(arg): return defaultdict(arg)

#####Inverse#####
def inv(n): return pow(n, MOD-2, MOD)

######Combination######
kaijo_memo = []
def kaijo(n):
  if(len(kaijo_memo) > n): return kaijo_memo[n]
  if(len(kaijo_memo) == 0): kaijo_memo.append(1)
  while(len(kaijo_memo) <= n): kaijo_memo.append(kaijo_memo[-1] * len(kaijo_memo) % MOD)
  return kaijo_memo[n]

gyaku_kaijo_memo = []
def gyaku_kaijo(n):
  if(len(gyaku_kaijo_memo) > n): return gyaku_kaijo_memo[n]
  if(len(gyaku_kaijo_memo) == 0): gyaku_kaijo_memo.append(1)
  while(len(gyaku_kaijo_memo) <= n): gyaku_kaijo_memo.append(gyaku_kaijo_memo[-1] * pow(len(gyaku_kaijo_memo),MOD-2,MOD) % MOD)
  return gyaku_kaijo_memo[n]

def nCr(n,r):
  if n == r: return 1
  if n < r or r < 0: return 0
  ret = 1
  ret = ret * kaijo(n) % MOD
  ret = ret * gyaku_kaijo(r) % MOD
  ret = ret * gyaku_kaijo(n-r) % MOD
  return ret

######Factorization######
def factorization(n):
  arr = []
  temp = n
  for i in range(2, int(-(-n**0.5//1))+1):
    if temp%i==0:
      cnt=0
      while temp%i==0: 
        cnt+=1 
        temp //= i
      arr.append([i, cnt])
  if temp!=1: arr.append([temp, 1])
  if arr==[]: arr.append([n, 1])
  return arr

#####MakeDivisors######
def make_divisors(n):
  divisors = []
  for i in range(1, int(n**0.5)+1):
    if n % i == 0:
      divisors.append(i)
      if i != n // i: 
        divisors.append(n//i)
  return divisors

#####MakePrimes######
def make_primes(N):
  max = int(math.sqrt(N))
  seachList = [i for i in range(2,N+1)]
  primeNum = []
  while seachList[0] <= max:
    primeNum.append(seachList[0])
    tmp = seachList[0]
    seachList = [i for i in seachList if i % tmp != 0]
  primeNum.extend(seachList)
  return primeNum

#####GCD#####
def gcd(a, b):
    while b: a, b = b, a % b
    return a

#####LCM#####
def lcm(a, b):
    return a * b // gcd (a, b)

#####BitCount#####
def count_bit(n):
  count = 0
  while n:
    n &= n-1
    count += 1
  return count

#####ChangeBase#####
def base_10_to_n(X, n):
  if X//n: return base_10_to_n(X//n, n)+[X%n]
  return [X%n]

def base_n_to_10(X, n):
  return sum(int(str(X)[-i-1])*n**i for i in range(len(str(X))))

def base_10_to_n_without_0(X, n):
  X -= 1
  if X//n: return base_10_to_n_without_0(X//n, n)+[X%n]
  return [X%n]

#####IntLog#####
def int_log(n, a):
  count = 0
  while n>=a:
    n //= a
    count += 1
  return count

#############
# Main Code #
#############
N,M,K = IL()

print((((N*(N+1)*(N-1)//6)*M**2+(M*(M+1)*(M-1)//6)*N**2) * nCr(K,2)*nCr(N*M,K)*inv(nCr(N*M,2)))%MOD) import sys sys input = sys.stdin.readline input sys.stdin.readline sys.stdin sys stdin readline import math math import bisect bisect import heapq heapq from collections import defaultdict from collections import deque from collections import Counter from functools import lru_cache MOD = 10**9+7 MOD 10**9+7 10**9 10 9 7 INF = float('inf') INF float('inf') float 'inf' AZ = "abcdefghijklmnopqrstuvwxyz" AZ "abcdefghijklmnopqrstuvwxyz" def I(): return int(input().strip()) I def S(): return input().strip() S def IL(): return list(map(int,input().split())) IL def SL(): return list(map(str,input().split())) SL def ILs(n): return list(int(input()) for _ in range(n)) ILs n n def SLs(n): return list(input().strip() for _ in range(n)) SLs n n list(map(int, input().split())) for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split def ILL(n): return [list(map(int, input().split())) for _ in range(n)] ILL n n list(map(str, input().split())) for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) list(map(str, input().split())) list map(str, input().split()) map str input().split() ().split () input split def SLL(n): return [list(map(str, input().split())) for _ in range(n)]


#####Shorten##### SLL n n def DD(arg): return defaultdict(arg)

#####Inverse##### DD arg arg def inv(n): return pow(n, MOD-2, MOD)

######Combination###### inv n n kaijo_memo = [] kaijo_memo [] def kaijo(n):
  if(len(kaijo_memo) > n): return kaijo_memo[n]
  if(len(kaijo_memo) == 0): kaijo_memo.append(1)
  while(len(kaijo_memo) <= n): kaijo_memo.append(kaijo_memo[-1] * len(kaijo_memo) % MOD)
  return kaijo_memo[n] kaijo if(len(kaijo_memo) > n): return kaijo_memo[n]
   len(kaijo_memo) > n len(kaijo_memo) len kaijo_memo n if(len(kaijo_memo) == 0): kaijo_memo.append(1)
   len(kaijo_memo) == 0 len(kaijo_memo) len kaijo_memo 0 while(len(kaijo_memo) <= n): kaijo_memo.append(kaijo_memo[-1] * len(kaijo_memo) % MOD)
   len(kaijo_memo) <= n len(kaijo_memo) len kaijo_memo n return kaijo_memo[n] kaijo_memo[n] kaijo_memo n n n gyaku_kaijo_memo = [] gyaku_kaijo_memo [] def gyaku_kaijo(n):
  if(len(gyaku_kaijo_memo) > n): return gyaku_kaijo_memo[n]
  if(len(gyaku_kaijo_memo) == 0): gyaku_kaijo_memo.append(1)
  while(len(gyaku_kaijo_memo) <= n): gyaku_kaijo_memo.append(gyaku_kaijo_memo[-1] * pow(len(gyaku_kaijo_memo),MOD-2,MOD) % MOD)
  return gyaku_kaijo_memo[n] gyaku_kaijo if(len(gyaku_kaijo_memo) > n): return gyaku_kaijo_memo[n]
   len(gyaku_kaijo_memo) > n len(gyaku_kaijo_memo) len gyaku_kaijo_memo n if(len(gyaku_kaijo_memo) == 0): gyaku_kaijo_memo.append(1)
   len(gyaku_kaijo_memo) == 0 len(gyaku_kaijo_memo) len gyaku_kaijo_memo 0 while(len(gyaku_kaijo_memo) <= n): gyaku_kaijo_memo.append(gyaku_kaijo_memo[-1] * pow(len(gyaku_kaijo_memo),MOD-2,MOD) % MOD)
   len(gyaku_kaijo_memo) <= n len(gyaku_kaijo_memo) len gyaku_kaijo_memo n return gyaku_kaijo_memo[n] gyaku_kaijo_memo[n] gyaku_kaijo_memo n n n def nCr(n,r):
  if n == r: return 1
  if n < r or r < 0: return 0
  ret = 1
  ret = ret * kaijo(n) % MOD
  ret = ret * gyaku_kaijo(r) % MOD
  ret = ret * gyaku_kaijo(n-r) % MOD
  return ret

######Factorization###### nCr if n == r: return 1
   n == r n r if n < r or r < 0: return 0
   n < r or r < 0 n < r n r r < 0 r 0 ret = 1 ret 1 ret = ret * kaijo(n) % MOD ret ret * kaijo(n) % MOD ret * kaijo(n) ret kaijo(n) kaijo n MOD ret = ret * gyaku_kaijo(r) % MOD ret ret * gyaku_kaijo(r) % MOD ret * gyaku_kaijo(r) ret gyaku_kaijo(r) gyaku_kaijo r MOD ret = ret * gyaku_kaijo(n-r) % MOD ret ret * gyaku_kaijo(n-r) % MOD ret * gyaku_kaijo(n-r) ret gyaku_kaijo(n-r) gyaku_kaijo n-r n r MOD return ret ret n n r r def factorization(n):
  arr = []
  temp = n
  for i in range(2, int(-(-n**0.5//1))+1):
    if temp%i==0:
      cnt=0
      while temp%i==0: 
        cnt+=1 
        temp //= i
      arr.append([i, cnt])
  if temp!=1: arr.append([temp, 1])
  if arr==[]: arr.append([n, 1])
  return arr

#####MakeDivisors###### factorization arr = [] arr [] temp = n temp n for i in range(2, int(-(-n**0.5//1))+1):
    if temp%i==0:
      cnt=0
      while temp%i==0: 
        cnt+=1 
        temp //= i
      arr.append([i, cnt])
   i range(2, int(-(-n**0.5//1))+1) range 2 int(-(-n**0.5//1))+1 int(-(-n**0.5//1)) int -(-n**0.5//1) -n**0.5//1 -n**0.5 n**0.5 n 0.5 1 1 if temp%i==0:
      cnt=0
      while temp%i==0: 
        cnt+=1 
        temp //= i
      arr.append([i, cnt])
   temp%i==0 temp%i temp i 0 cnt=0 cnt 0 while temp%i==0: 
        cnt+=1 
        temp //= i
       temp%i==0 temp%i temp i 0 cnt+=1 cnt 1 temp //= i temp i arr.append([i, cnt]) arr.append arr append [i, cnt] i cnt if temp!=1: arr.append([temp, 1])
   temp!=1 temp 1 if arr==[]: arr.append([n, 1])
   arr==[] arr [] return arr arr n n def make_divisors(n):
  divisors = []
  for i in range(1, int(n**0.5)+1):
    if n % i == 0:
      divisors.append(i)
      if i != n // i: 
        divisors.append(n//i)
  return divisors

#####MakePrimes###### make_divisors divisors = [] divisors [] for i in range(1, int(n**0.5)+1):
    if n % i == 0:
      divisors.append(i)
      if i != n // i: 
        divisors.append(n//i)
   i range(1, int(n**0.5)+1) range 1 int(n**0.5)+1 int(n**0.5) int n**0.5 n 0.5 1 if n % i == 0:
      divisors.append(i)
      if i != n // i: 
        divisors.append(n//i)
   n % i == 0 n % i n i 0 divisors.append(i) divisors.append divisors append i if i != n // i: 
        divisors.append(n//i)
   i != n // i i n // i n i divisors.append(n//i) divisors.append divisors append n//i n i return divisors divisors n n def make_primes(N):
  max = int(math.sqrt(N))
  seachList = [i for i in range(2,N+1)]
  primeNum = []
  while seachList[0] <= max:
    primeNum.append(seachList[0])
    tmp = seachList[0]
    seachList = [i for i in seachList if i % tmp != 0]
  primeNum.extend(seachList)
  return primeNum

#####GCD##### make_primes max = int(math.sqrt(N)) max int(math.sqrt(N)) int math.sqrt(N) math.sqrt math sqrt N i for i in range(2,N+1) for i in range(2,N+1) i range(2,N+1) range 2 N+1 N 1 for i in range(2,N+1) i seachList = [i for i in range(2,N+1)] seachList [i for i in range(2,N+1)] primeNum = [] primeNum [] while seachList[0] <= max:
    primeNum.append(seachList[0])
    tmp = seachList[0]
    seachList = [i for i in seachList if i % tmp != 0]
   seachList[0] <= max seachList[0] seachList 0 max primeNum.append(seachList[0]) primeNum.append primeNum append seachList[0] seachList 0 tmp = seachList[0] tmp seachList[0] seachList 0 i for i in seachList if i % tmp != 0 for i in seachList if i % tmp != 0 i seachList i % tmp != 0 i % tmp i tmp 0 if i % tmp != 0 i seachList = [i for i in seachList if i % tmp != 0] seachList [i for i in seachList if i % tmp != 0] primeNum.extend(seachList) primeNum.extend primeNum extend seachList return primeNum primeNum N N def gcd(a, b):
    while b: a, b = b, a % b
    return a

#####LCM##### gcd while b: a, b = b, a % b
     b return a a a a b b def lcm(a, b):
    return a * b // gcd (a, b)

#####BitCount##### lcm return a * b // gcd (a, b) a * b // gcd (a, b) a * b a b gcd (a, b) gcd a b a a b b def count_bit(n):
  count = 0
  while n:
    n &= n-1
    count += 1
  return count

#####ChangeBase##### count_bit count = 0 count 0 while n:
    n &= n-1
    count += 1
   n n &= n-1 n n-1 n 1 count += 1 count 1 return count count n n def base_10_to_n(X, n):
  if X//n: return base_10_to_n(X//n, n)+[X%n]
  return [X%n] base_10_to_n if X//n: return base_10_to_n(X//n, n)+[X%n]
   X//n X n return [X%n] [X%n] X%n X n X X n n def base_n_to_10(X, n):
  return sum(int(str(X)[-i-1])*n**i for i in range(len(str(X)))) base_n_to_10 return sum(int(str(X)[-i-1])*n**i for i in range(len(str(X)))) sum(int(str(X)[-i-1])*n**i for i in range(len(str(X)))) sum int(str(X)[-i-1])*n**i int(str(X)[-i-1]) int str(X)[-i-1] (X) str X -i-1 -i i 1 n**i n i X X n n def base_10_to_n_without_0(X, n):
  X -= 1
  if X//n: return base_10_to_n_without_0(X//n, n)+[X%n]
  return [X%n]

#####IntLog##### base_10_to_n_without_0 X -= 1 X 1 if X//n: return base_10_to_n_without_0(X//n, n)+[X%n]
   X//n X n return [X%n] [X%n] X%n X n X X n n def int_log(n, a):
  count = 0
  while n>=a:
    n //= a
    count += 1
  return count

#############
# Main Code #
############# int_log count = 0 count 0 while n>=a:
    n //= a
    count += 1
   n>=a n a n //= a n a count += 1 count 1 return count count n n a a N,M,K = IL() N IL() IL M K print((((N*(N+1)*(N-1)//6)*M**2+(M*(M+1)*(M-1)//6)*N**2) * nCr(K,2)*nCr(N*M,K)*inv(nCr(N*M,2)))%MOD) print (((N*(N+1)*(N-1)//6)*M**2+(M*(M+1)*(M-1)//6)*N**2) * nCr(K,2)*nCr(N*M,K)*inv(nCr(N*M,2)))%MOD ((N*(N+1)*(N-1)//6)*M**2+(M*(M+1)*(M-1)//6)*N**2) * nCr(K,2)*nCr(N*M,K)*inv(nCr(N*M,2)) ((N*(N+1)*(N-1)//6)*M**2+(M*(M+1)*(M-1)//6)*N**2) * nCr(K,2)*nCr(N*M,K) ((N*(N+1)*(N-1)//6)*M**2+(M*(M+1)*(M-1)//6)*N**2) * nCr(K,2) (N*(N+1)*(N-1)//6)*M**2+(M*(M+1)*(M-1)//6)*N**2 (N*(N+1)*(N-1)//6)*M**2 N*(N+1)*(N-1)//6 N*(N+1)*(N-1) N*(N+1) N N+1 N 1 N-1 N 1 6 M**2 M 2 (M*(M+1)*(M-1)//6)*N**2 M*(M+1)*(M-1)//6 M*(M+1)*(M-1) M*(M+1) M M+1 M 1 M-1 M 1 6 N**2 N 2 nCr(K,2) nCr K 2 nCr(N*M,K) nCr N*M N M K inv(nCr(N*M,2)) inv nCr(N*M,2) nCr N*M N M 2 MOD def base_10_to_n(X, n):
  if X//n: return base_10_to_n(X//n, n)+[X%n]
  return [X%n] def base_10_to_n(X, n):
  if X//n: return base_10_to_n(X//n, n)+[X%n]
  return [X%n] base_10_to_n def I(): return int(input().strip()) def I(): return int(input().strip()) I def DD(arg): return defaultdict(arg)

#####Inverse##### def DD(arg): return defaultdict(arg)

#####Inverse##### DD def ILs(n): return list(int(input()) for _ in range(n)) def ILs(n): return list(int(input()) for _ in range(n)) ILs def make_primes(N):
  max = int(math.sqrt(N))
  seachList = [i for i in range(2,N+1)]
  primeNum = []
  while seachList[0] <= max:
    primeNum.append(seachList[0])
    tmp = seachList[0]
    seachList = [i for i in seachList if i % tmp != 0]
  primeNum.extend(seachList)
  return primeNum

#####GCD##### def make_primes(N):
  max = int(math.sqrt(N))
  seachList = [i for i in range(2,N+1)]
  primeNum = []
  while seachList[0] <= max:
    primeNum.append(seachList[0])
    tmp = seachList[0]
    seachList = [i for i in seachList if i % tmp != 0]
  primeNum.extend(seachList)
  return primeNum

#####GCD##### make_primes def S(): return input().strip() def S(): return input().strip() S def IL(): return list(map(int,input().split())) def IL(): return list(map(int,input().split())) IL input = sys.stdin.readline sys.stdin.readline input M,K = IL() IL() M INF = float('inf') float('inf') INF def int_log(n, a):
  count = 0
  while n>=a:
    n //= a
    count += 1
  return count

#############
# Main Code #
############# def int_log(n, a):
  count = 0
  while n>=a:
    n //= a
    count += 1
  return count

#############
# Main Code #
############# int_log def gcd(a, b):
    while b: a, b = b, a % b
    return a

#####LCM##### def gcd(a, b):
    while b: a, b = b, a % b
    return a

#####LCM##### gcd def kaijo(n):
  if(len(kaijo_memo) > n): return kaijo_memo[n]
  if(len(kaijo_memo) == 0): kaijo_memo.append(1)
  while(len(kaijo_memo) <= n): kaijo_memo.append(kaijo_memo[-1] * len(kaijo_memo) % MOD)
  return kaijo_memo[n] def kaijo(n):
  if(len(kaijo_memo) > n): return kaijo_memo[n]
  if(len(kaijo_memo) == 0): kaijo_memo.append(1)
  while(len(kaijo_memo) <= n): kaijo_memo.append(kaijo_memo[-1] * len(kaijo_memo) % MOD)
  return kaijo_memo[n] kaijo def SLs(n): return list(input().strip() for _ in range(n)) def SLs(n): return list(input().strip() for _ in range(n)) SLs MOD = 10**9+7 10**9+7 MOD def base_10_to_n_without_0(X, n):
  X -= 1
  if X//n: return base_10_to_n_without_0(X//n, n)+[X%n]
  return [X%n]

#####IntLog##### def base_10_to_n_without_0(X, n):
  X -= 1
  if X//n: return base_10_to_n_without_0(X//n, n)+[X%n]
  return [X%n]

#####IntLog##### base_10_to_n_without_0 def factorization(n):
  arr = []
  temp = n
  for i in range(2, int(-(-n**0.5//1))+1):
    if temp%i==0:
      cnt=0
      while temp%i==0: 
        cnt+=1 
        temp //= i
      arr.append([i, cnt])
  if temp!=1: arr.append([temp, 1])
  if arr==[]: arr.append([n, 1])
  return arr

#####MakeDivisors###### def factorization(n):
  arr = []
  temp = n
  for i in range(2, int(-(-n**0.5//1))+1):
    if temp%i==0:
      cnt=0
      while temp%i==0: 
        cnt+=1 
        temp //= i
      arr.append([i, cnt])
  if temp!=1: arr.append([temp, 1])
  if arr==[]: arr.append([n, 1])
  return arr

#####MakeDivisors###### factorization def make_divisors(n):
  divisors = []
  for i in range(1, int(n**0.5)+1):
    if n % i == 0:
      divisors.append(i)
      if i != n // i: 
        divisors.append(n//i)
  return divisors

#####MakePrimes###### def make_divisors(n):
  divisors = []
  for i in range(1, int(n**0.5)+1):
    if n % i == 0:
      divisors.append(i)
      if i != n // i: 
        divisors.append(n//i)
  return divisors

#####MakePrimes###### make_divisors def ILL(n): return [list(map(int, input().split())) for _ in range(n)] def ILL(n): return [list(map(int, input().split())) for _ in range(n)] ILL def inv(n): return pow(n, MOD-2, MOD)

######Combination###### def inv(n): return pow(n, MOD-2, MOD)

######Combination###### inv AZ = "abcdefghijklmnopqrstuvwxyz" "abcdefghijklmnopqrstuvwxyz" AZ def SL(): return list(map(str,input().split())) def SL(): return list(map(str,input().split())) SL def base_n_to_10(X, n):
  return sum(int(str(X)[-i-1])*n**i for i in range(len(str(X)))) def base_n_to_10(X, n):
  return sum(int(str(X)[-i-1])*n**i for i in range(len(str(X)))) base_n_to_10 K = IL() IL() K def count_bit(n):
  count = 0
  while n:
    n &= n-1
    count += 1
  return count

#####ChangeBase##### def count_bit(n):
  count = 0
  while n:
    n &= n-1
    count += 1
  return count

#####ChangeBase##### count_bit kaijo_memo = [] [] kaijo_memo gyaku_kaijo_memo = [] [] gyaku_kaijo_memo N,M,K = IL() IL() N def lcm(a, b):
    return a * b // gcd (a, b)

#####BitCount##### def lcm(a, b):
    return a * b // gcd (a, b)

#####BitCount##### lcm def nCr(n,r):
  if n == r: return 1
  if n < r or r < 0: return 0
  ret = 1
  ret = ret * kaijo(n) % MOD
  ret = ret * gyaku_kaijo(r) % MOD
  ret = ret * gyaku_kaijo(n-r) % MOD
  return ret

######Factorization###### def nCr(n,r):
  if n == r: return 1
  if n < r or r < 0: return 0
  ret = 1
  ret = ret * kaijo(n) % MOD
  ret = ret * gyaku_kaijo(r) % MOD
  ret = ret * gyaku_kaijo(n-r) % MOD
  return ret

######Factorization###### nCr def SLL(n): return [list(map(str, input().split())) for _ in range(n)]


#####Shorten##### def SLL(n): return [list(map(str, input().split())) for _ in range(n)]


#####Shorten##### SLL def gyaku_kaijo(n):
  if(len(gyaku_kaijo_memo) > n): return gyaku_kaijo_memo[n]
  if(len(gyaku_kaijo_memo) == 0): gyaku_kaijo_memo.append(1)
  while(len(gyaku_kaijo_memo) <= n): gyaku_kaijo_memo.append(gyaku_kaijo_memo[-1] * pow(len(gyaku_kaijo_memo),MOD-2,MOD) % MOD)
  return gyaku_kaijo_memo[n] def gyaku_kaijo(n):
  if(len(gyaku_kaijo_memo) > n): return gyaku_kaijo_memo[n]
  if(len(gyaku_kaijo_memo) == 0): gyaku_kaijo_memo.append(1)
  while(len(gyaku_kaijo_memo) <= n): gyaku_kaijo_memo.append(gyaku_kaijo_memo[-1] * pow(len(gyaku_kaijo_memo),MOD-2,MOD) % MOD)
  return gyaku_kaijo_memo[n] gyaku_kaijo
# -*- coding: utf-8 -*-

#############
# Libraries #
#############

import sys
input = sys.stdin.readline

import math
#from math import gcd
import bisect
import heapq
from collections import defaultdict
from collections import deque
from collections import Counter
from functools import lru_cache

#############
# Constants #
#############

MOD = 10**9+7
INF = float('inf')
AZ = "abcdefghijklmnopqrstuvwxyz"

#############
# Functions #
#############

######INPUT######
def I(): return int(input().strip())
def S(): return input().strip()
def IL(): return list(map(int,input().split()))
def SL(): return list(map(str,input().split()))
def ILs(n): return list(int(input()) for _ in range(n))
def SLs(n): return list(input().strip() for _ in range(n))
def ILL(n): return [list(map(int, input().split())) for _ in range(n)]
def SLL(n): return [list(map(str, input().split())) for _ in range(n)]


#####Shorten#####
def DD(arg): return defaultdict(arg)

#####Inverse#####
def inv(n): return pow(n, MOD-2, MOD)

######Combination######
kaijo_memo = []
def kaijo(n):
  if(len(kaijo_memo) > n): return kaijo_memo[n]
  if(len(kaijo_memo) == 0): kaijo_memo.append(1)
  while(len(kaijo_memo) <= n): kaijo_memo.append(kaijo_memo[-1] * len(kaijo_memo) % MOD)
  return kaijo_memo[n]

gyaku_kaijo_memo = []
def gyaku_kaijo(n):
  if(len(gyaku_kaijo_memo) > n): return gyaku_kaijo_memo[n]
  if(len(gyaku_kaijo_memo) == 0): gyaku_kaijo_memo.append(1)
  while(len(gyaku_kaijo_memo) <= n): gyaku_kaijo_memo.append(gyaku_kaijo_memo[-1] * pow(len(gyaku_kaijo_memo),MOD-2,MOD) % MOD)
  return gyaku_kaijo_memo[n]

def nCr(n,r):
  if n == r: return 1
  if n < r or r < 0: return 0
  ret = 1
  ret = ret * kaijo(n) % MOD
  ret = ret * gyaku_kaijo(r) % MOD
  ret = ret * gyaku_kaijo(n-r) % MOD
  return ret

######Factorization######
def factorization(n):
  arr = []
  temp = n
  for i in range(2, int(-(-n**0.5//1))+1):
    if temp%i==0:
      cnt=0
      while temp%i==0: 
        cnt+=1 
        temp //= i
      arr.append([i, cnt])
  if temp!=1: arr.append([temp, 1])
  if arr==[]: arr.append([n, 1])
  return arr

#####MakeDivisors######
def make_divisors(n):
  divisors = []
  for i in range(1, int(n**0.5)+1):
    if n % i == 0:
      divisors.append(i)
      if i != n // i: 
        divisors.append(n//i)
  return divisors

#####MakePrimes######
def make_primes(N):
  max = int(math.sqrt(N))
  seachList = [i for i in range(2,N+1)]
  primeNum = []
  while seachList[0] <= max:
    primeNum.append(seachList[0])
    tmp = seachList[0]
    seachList = [i for i in seachList if i % tmp != 0]
  primeNum.extend(seachList)
  return primeNum

#####GCD#####
def gcd(a, b):
    while b: a, b = b, a % b
    return a

#####LCM#####
def lcm(a, b):
    return a * b // gcd (a, b)

#####BitCount#####
def count_bit(n):
  count = 0
  while n:
    n &= n-1
    count += 1
  return count

#####ChangeBase#####
def base_10_to_n(X, n):
  if X//n: return base_10_to_n(X//n, n)+[X%n]
  return [X%n]

def base_n_to_10(X, n):
  return sum(int(str(X)[-i-1])*n**i for i in range(len(str(X))))

def base_10_to_n_without_0(X, n):
  X -= 1
  if X//n: return base_10_to_n_without_0(X//n, n)+[X%n]
  return [X%n]

#####IntLog#####
def int_log(n, a):
  count = 0
  while n>=a:
    n //= a
    count += 1
  return count

#############
# Main Code #
#############
N,M,K = IL()

print((((N*(N+1)*(N-1)//6)*M**2+(M*(M+1)*(M-1)//6)*N**2) * nCr(K,2)*nCr(N*M,K)*inv(nCr(N*M,2)))%MOD)