#!/usr/bin/env python

import sys
#from sympy import isprime

class bigint:
    primeset = set()
    def __init__(self,n,mod):
        if not mod in bigint.primeset:
            assert mod**2 < sys.maxsize, "modulo is too large"
            #assert isprime(mod), "modulo should be a prime number"
            bigint.primeset.add(mod)
        #
        self.n = n % mod
        self.mod = mod
        return
    #
    def __str__(self):
        return str(self.n)
    #
    def __add__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n+other.n,self.mod)
    #
    def __sub__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n-other.n,self.mod)
    #
    def __mul__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n*other.n,self.mod)
    #
    def __pow__(self,other):
        assert type(other)==int, "power should be integer"
        #
        if other<0: return self ** ( other % ( self.mod-1 ) )
        elif other==0: return 1
        elif other==1: return self
        elif other%2==0:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 ) % self.mod,self.mod )
        else:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 * self.n ) % self.mod,self.mod )
    #
    def __truediv__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return self * ( other ** (other.mod-2) )
#
#::::::::::::::::::::::::::::::::::::::::::::::::::
mod= 10**9 + 7

def combination(n,m):
    global mod
    assert type(n)==type(m)==int, "type error"
    #
    mm= min(m,n-m)
    if mm==0: return bigint(1,mod)
    elif mm>0:
        a = bigint(n,mod)
        b = bigint(1,mod)
        for i in range(1,mm):
            a = a * bigint(n-i,mod)
            b = b * bigint(i+1,mod)
        return a / b
    #
    raise ValueError
#
n,m,k = [ int(x) for x in sys.stdin.readline().split() ]
#
# const.
nn= n * n
mm= m * m
cc= combination(n*m-2,k-2)

# initialize
score=bigint(0,mod)

# scan over horizontal direction
for i in range(1,n):
    score= score + bigint(i * mm * (n-i),mod) * cc

# scan over vertical direction
for i in range(1,m):
    score= score + bigint(i * nn * (m-i),mod) * cc
#
print( score ) import sys sys class bigint:
    primeset = set()
    def __init__(self,n,mod):
        if not mod in bigint.primeset:
            assert mod**2 < sys.maxsize, "modulo is too large"
            #assert isprime(mod), "modulo should be a prime number"
            bigint.primeset.add(mod)
        #
        self.n = n % mod
        self.mod = mod
        return
    #
    def __str__(self):
        return str(self.n)
    #
    def __add__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n+other.n,self.mod)
    #
    def __sub__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n-other.n,self.mod)
    #
    def __mul__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n*other.n,self.mod)
    #
    def __pow__(self,other):
        assert type(other)==int, "power should be integer"
        #
        if other<0: return self ** ( other % ( self.mod-1 ) )
        elif other==0: return 1
        elif other==1: return self
        elif other%2==0:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 ) % self.mod,self.mod )
        else:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 * self.n ) % self.mod,self.mod )
    #
    def __truediv__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return self * ( other ** (other.mod-2) )
#
#:::::::::::::::::::::::::::::::::::::::::::::::::: bigint primeset = set() primeset set() set def __init__(self,n,mod):
        if not mod in bigint.primeset:
            assert mod**2 < sys.maxsize, "modulo is too large"
            #assert isprime(mod), "modulo should be a prime number"
            bigint.primeset.add(mod)
        #
        self.n = n % mod
        self.mod = mod
        return
    #
     __init__ if not mod in bigint.primeset:
            assert mod**2 < sys.maxsize, "modulo is too large"
            #assert isprime(mod), "modulo should be a prime number"
            bigint.primeset.add(mod)
        #
         not mod in bigint.primeset mod in bigint.primeset mod bigint.primeset bigint primeset assert mod**2 < sys.maxsize, "modulo is too large" mod**2 < sys.maxsize mod**2 mod 2 sys.maxsize sys maxsize "modulo is too large" bigint.primeset.add(mod) bigint.primeset.add bigint.primeset bigint primeset add mod self.n = n % mod self.n self n n % mod n mod self.mod = mod self.mod self mod mod return self self n n mod mod def __str__(self):
        return str(self.n)
    #
     __str__ return str(self.n) str(self.n) str self.n self n self self def __add__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n+other.n,self.mod)
    #
     __add__ assert self.mod==other.mod, "modulos of the two not match" self.mod==other.mod self.mod self mod other.mod other mod "modulos of the two not match" return bigint(self.n+other.n,self.mod) bigint(self.n+other.n,self.mod) bigint self.n+other.n self.n self n other.n other n self.mod self mod self self other other def __sub__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n-other.n,self.mod)
    #
     __sub__ assert self.mod==other.mod, "modulos of the two not match" self.mod==other.mod self.mod self mod other.mod other mod "modulos of the two not match" return bigint(self.n-other.n,self.mod) bigint(self.n-other.n,self.mod) bigint self.n-other.n self.n self n other.n other n self.mod self mod self self other other def __mul__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n*other.n,self.mod)
    #
     __mul__ assert self.mod==other.mod, "modulos of the two not match" self.mod==other.mod self.mod self mod other.mod other mod "modulos of the two not match" return bigint(self.n*other.n,self.mod) bigint(self.n*other.n,self.mod) bigint self.n*other.n self.n self n other.n other n self.mod self mod self self other other def __pow__(self,other):
        assert type(other)==int, "power should be integer"
        #
        if other<0: return self ** ( other % ( self.mod-1 ) )
        elif other==0: return 1
        elif other==1: return self
        elif other%2==0:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 ) % self.mod,self.mod )
        else:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 * self.n ) % self.mod,self.mod )
    #
     __pow__ assert type(other)==int, "power should be integer" type(other)==int type(other) type other int "power should be integer" if other<0: return self ** ( other % ( self.mod-1 ) )
        elif other==0: return 1
        elif other==1: return self
        elif other%2==0:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 ) % self.mod,self.mod )
        else:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 * self.n ) % self.mod,self.mod )
    #
     other<0 other 0 elif other==0: return 1
         other==0 other 0 elif other==1: return self
         other==1 other 1 elif other%2==0:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 ) % self.mod,self.mod )
         other%2==0 other%2 other 2 0 tmp= self ** (other//2) tmp self ** (other//2) self other//2 other 2 return bigint( ( tmp.n**2 ) % self.mod,self.mod ) bigint( ( tmp.n**2 ) % self.mod,self.mod ) bigint ( tmp.n**2 ) % self.mod tmp.n**2 tmp.n tmp n 2 self.mod self mod self.mod self mod tmp= self ** (other//2) tmp self ** (other//2) self other//2 other 2 return bigint( ( tmp.n**2 * self.n ) % self.mod,self.mod ) bigint( ( tmp.n**2 * self.n ) % self.mod,self.mod ) bigint ( tmp.n**2 * self.n ) % self.mod tmp.n**2 * self.n tmp.n**2 tmp.n tmp n 2 self.n self n self.mod self mod self.mod self mod self self other other def __truediv__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return self * ( other ** (other.mod-2) )
#
#:::::::::::::::::::::::::::::::::::::::::::::::::: __truediv__ assert self.mod==other.mod, "modulos of the two not match" self.mod==other.mod self.mod self mod other.mod other mod "modulos of the two not match" return self * ( other ** (other.mod-2) ) self * ( other ** (other.mod-2) ) self other ** (other.mod-2) other other.mod-2 other.mod other mod 2 self self other other mod= 10**9 + 7 mod 10**9 + 7 10**9 10 9 7 def combination(n,m):
    global mod
    assert type(n)==type(m)==int, "type error"
    #
    mm= min(m,n-m)
    if mm==0: return bigint(1,mod)
    elif mm>0:
        a = bigint(n,mod)
        b = bigint(1,mod)
        for i in range(1,mm):
            a = a * bigint(n-i,mod)
            b = b * bigint(i+1,mod)
        return a / b
    #
    raise ValueError
# combination global mod assert type(n)==type(m)==int, "type error" type(n)==type(m)==int type(n)==type(m) type(n) type n type(m) type m int "type error" mm= min(m,n-m) mm min(m,n-m) min m n-m n m if mm==0: return bigint(1,mod)
    elif mm>0:
        a = bigint(n,mod)
        b = bigint(1,mod)
        for i in range(1,mm):
            a = a * bigint(n-i,mod)
            b = b * bigint(i+1,mod)
        return a / b
    #
     mm==0 mm 0 elif mm>0:
        a = bigint(n,mod)
        b = bigint(1,mod)
        for i in range(1,mm):
            a = a * bigint(n-i,mod)
            b = b * bigint(i+1,mod)
        return a / b
    #
     mm>0 mm 0 a = bigint(n,mod) a bigint(n,mod) bigint n mod b = bigint(1,mod) b bigint(1,mod) bigint 1 mod for i in range(1,mm):
            a = a * bigint(n-i,mod)
            b = b * bigint(i+1,mod)
         i range(1,mm) range 1 mm a = a * bigint(n-i,mod) a a * bigint(n-i,mod) a bigint(n-i,mod) bigint n-i n i mod b = b * bigint(i+1,mod) b b * bigint(i+1,mod) b bigint(i+1,mod) bigint i+1 i 1 mod return a / b a / b a b raise ValueError ValueError n n m m int(x) for x in sys.stdin.readline().split() for x in sys.stdin.readline().split() x sys.stdin.readline().split() sys.stdin.readline().split sys.stdin.readline() sys.stdin.readline sys.stdin sys stdin readline split for x in sys.stdin.readline().split() int(x) int x n,m,k = [ int(x) for x in sys.stdin.readline().split() ] n [ int(x) for x in sys.stdin.readline().split() ] m k nn= n * n nn n * n n n mm= m * m mm m * m m m cc= combination(n*m-2,k-2) cc combination(n*m-2,k-2) combination n*m-2 n*m n m 2 k-2 k 2 score=bigint(0,mod) score bigint(0,mod) bigint 0 mod for i in range(1,n):
    score= score + bigint(i * mm * (n-i),mod) * cc

# scan over vertical direction i range(1,n) range 1 n score= score + bigint(i * mm * (n-i),mod) * cc score score + bigint(i * mm * (n-i),mod) * cc score bigint(i * mm * (n-i),mod) * cc bigint(i * mm * (n-i),mod) bigint i * mm * (n-i) i * mm i mm n-i n i mod cc for i in range(1,m):
    score= score + bigint(i * nn * (m-i),mod) * cc
# i range(1,m) range 1 m score= score + bigint(i * nn * (m-i),mod) * cc score score + bigint(i * nn * (m-i),mod) * cc score bigint(i * nn * (m-i),mod) * cc bigint(i * nn * (m-i),mod) bigint i * nn * (m-i) i * nn i nn m-i m i mod cc print( score ) print score m,k = [ int(x) for x in sys.stdin.readline().split() ] [ int(x) for x in sys.stdin.readline().split() ] m k = [ int(x) for x in sys.stdin.readline().split() ] [ int(x) for x in sys.stdin.readline().split() ] k mm= m * m m * m mm score=bigint(0,mod) bigint(0,mod) score score= score + bigint(i * nn * (m-i),mod) * cc score + bigint(i * nn * (m-i),mod) * cc score mod= 10**9 + 7 10**9 + 7 mod n,m,k = [ int(x) for x in sys.stdin.readline().split() ] [ int(x) for x in sys.stdin.readline().split() ] n cc= combination(n*m-2,k-2) combination(n*m-2,k-2) cc score= score + bigint(i * mm * (n-i),mod) * cc score + bigint(i * mm * (n-i),mod) * cc score class bigint:
    primeset = set()
    def __init__(self,n,mod):
        if not mod in bigint.primeset:
            assert mod**2 < sys.maxsize, "modulo is too large"
            #assert isprime(mod), "modulo should be a prime number"
            bigint.primeset.add(mod)
        #
        self.n = n % mod
        self.mod = mod
        return
    #
    def __str__(self):
        return str(self.n)
    #
    def __add__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n+other.n,self.mod)
    #
    def __sub__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n-other.n,self.mod)
    #
    def __mul__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n*other.n,self.mod)
    #
    def __pow__(self,other):
        assert type(other)==int, "power should be integer"
        #
        if other<0: return self ** ( other % ( self.mod-1 ) )
        elif other==0: return 1
        elif other==1: return self
        elif other%2==0:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 ) % self.mod,self.mod )
        else:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 * self.n ) % self.mod,self.mod )
    #
    def __truediv__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return self * ( other ** (other.mod-2) )
#
#:::::::::::::::::::::::::::::::::::::::::::::::::: class bigint:
    primeset = set()
    def __init__(self,n,mod):
        if not mod in bigint.primeset:
            assert mod**2 < sys.maxsize, "modulo is too large"
            #assert isprime(mod), "modulo should be a prime number"
            bigint.primeset.add(mod)
        #
        self.n = n % mod
        self.mod = mod
        return
    #
    def __str__(self):
        return str(self.n)
    #
    def __add__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n+other.n,self.mod)
    #
    def __sub__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n-other.n,self.mod)
    #
    def __mul__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n*other.n,self.mod)
    #
    def __pow__(self,other):
        assert type(other)==int, "power should be integer"
        #
        if other<0: return self ** ( other % ( self.mod-1 ) )
        elif other==0: return 1
        elif other==1: return self
        elif other%2==0:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 ) % self.mod,self.mod )
        else:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 * self.n ) % self.mod,self.mod )
    #
    def __truediv__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return self * ( other ** (other.mod-2) )
#
#:::::::::::::::::::::::::::::::::::::::::::::::::: bigint def combination(n,m):
    global mod
    assert type(n)==type(m)==int, "type error"
    #
    mm= min(m,n-m)
    if mm==0: return bigint(1,mod)
    elif mm>0:
        a = bigint(n,mod)
        b = bigint(1,mod)
        for i in range(1,mm):
            a = a * bigint(n-i,mod)
            b = b * bigint(i+1,mod)
        return a / b
    #
    raise ValueError
# def combination(n,m):
    global mod
    assert type(n)==type(m)==int, "type error"
    #
    mm= min(m,n-m)
    if mm==0: return bigint(1,mod)
    elif mm>0:
        a = bigint(n,mod)
        b = bigint(1,mod)
        for i in range(1,mm):
            a = a * bigint(n-i,mod)
            b = b * bigint(i+1,mod)
        return a / b
    #
    raise ValueError
# combination nn= n * n n * n nn
#!/usr/bin/env python

import sys
#from sympy import isprime

class bigint:
    primeset = set()
    def __init__(self,n,mod):
        if not mod in bigint.primeset:
            assert mod**2 < sys.maxsize, "modulo is too large"
            #assert isprime(mod), "modulo should be a prime number"
            bigint.primeset.add(mod)
        #
        self.n = n % mod
        self.mod = mod
        return
    #
    def __str__(self):
        return str(self.n)
    #
    def __add__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n+other.n,self.mod)
    #
    def __sub__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n-other.n,self.mod)
    #
    def __mul__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return bigint(self.n*other.n,self.mod)
    #
    def __pow__(self,other):
        assert type(other)==int, "power should be integer"
        #
        if other<0: return self ** ( other % ( self.mod-1 ) )
        elif other==0: return 1
        elif other==1: return self
        elif other%2==0:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 ) % self.mod,self.mod )
        else:
            tmp= self ** (other//2)
            return bigint( ( tmp.n**2 * self.n ) % self.mod,self.mod )
    #
    def __truediv__(self,other):
        assert self.mod==other.mod, "modulos of the two not match"
        return self * ( other ** (other.mod-2) )
#
#::::::::::::::::::::::::::::::::::::::::::::::::::
mod= 10**9 + 7

def combination(n,m):
    global mod
    assert type(n)==type(m)==int, "type error"
    #
    mm= min(m,n-m)
    if mm==0: return bigint(1,mod)
    elif mm>0:
        a = bigint(n,mod)
        b = bigint(1,mod)
        for i in range(1,mm):
            a = a * bigint(n-i,mod)
            b = b * bigint(i+1,mod)
        return a / b
    #
    raise ValueError
#
n,m,k = [ int(x) for x in sys.stdin.readline().split() ]
#
# const.
nn= n * n
mm= m * m
cc= combination(n*m-2,k-2)

# initialize
score=bigint(0,mod)

# scan over horizontal direction
for i in range(1,n):
    score= score + bigint(i * mm * (n-i),mod) * cc

# scan over vertical direction
for i in range(1,m):
    score= score + bigint(i * nn * (m-i),mod) * cc
#
print( score )
