def cmb(n, r, mod):

    if ( r<0 or r>n ):

        return 0

    r = min(r, n-r)

    return g1[n] * g2[r] * g2[n-r] % mod



mod = 10**9+7 #出力の制限

N = 10**6

g1 = [1, 1] # 元テーブル

g2 = [1, 1] #逆元テーブル

inverse = [0, 1] #逆元テーブル計算用テーブル



for i in range( 2, N + 1 ):

    g1.append( ( g1[-1] * i ) % mod )

    inverse.append( ( -inverse[mod % i] * (mod//i) ) % mod )

    g2.append( (g2[-1] * inverse[-1]) % mod )



n,m,k = list(map(int,input().split()))

nm = n*m%(10**9+7)

k = k%(10**9+7)

a = (cmb(nm-2,k-2,mod)%(10**9+7))*(nm*(m*(n**2-1)+n*(m**2-1)))//6

print((a%(10**9+7)))
def main():

     def cmb(n, r, mod):

          if ( r<0 or r>n ):

               return 0

          r = min(r, n-r)

          return g1[n] * g2[r] * g2[n-r] % mod

    

     mod = 10**9+7 #出力の制限

     N = 10**6

     g1 = [1, 1] # 元テーブル

     g2 = [1, 1] #逆元テーブル

     inverse = [0, 1] #逆元テーブル計算用テーブル

     

     for i in range( 2, N + 1 ):

          g1.append( ( g1[-1] * i ) % mod )

          inverse.append( ( -inverse[mod % i] * (mod//i) ) % mod )

          g2.append( (g2[-1] * inverse[-1]) % mod )



     n,m,k = list(map(int,input().split()))

     nm = n*m%(10**9+7)

     a = (cmb(nm-2,k-2,mod)%(10**9+7))*(nm*(m*(n**2-1)+n*(m**2-1)))//6

     print((a%(10**9+7)))

     

if __name__=='__main__':

     main()
def cmb(n, r, mod):
    if r < 0 or r > n:
        return 0
    r = min(r, n - r)
    return g1[n] * g2[r] * g2[n - r] % mod


mod = 10**9 + 7  # 出力の制限
N = 10**6
g1 = [1, 1]  # 元テーブル
g2 = [1, 1]  # 逆元テーブル
inverse = [0, 1]  # 逆元テーブル計算用テーブル
for i in range(2, N + 1):
    g1.append((g1[-1] * i) % mod)
    inverse.append((-inverse[mod % i] * (mod // i)) % mod)
    g2.append((g2[-1] * inverse[-1]) % mod)
n, m, k = list(map(int, input().split()))
nm = n * m % (10**9 + 7)
k = k % (10**9 + 7)
a = (
    (cmb(nm - 2, k - 2, mod) % (10**9 + 7))
    * (nm * (m * (n**2 - 1) + n * (m**2 - 1)))
    // 6
)
print((a % (10**9 + 7)))

def main():
    def cmb(n, r, mod):
        if r < 0 or r > n:
            return 0
        r = min(r, n - r)
        return g1[n] * g2[r] * g2[n - r] % mod

    mod = 10**9 + 7  # 出力の制限
    N = 10**6
    g1 = [1, 1]  # 元テーブル
    g2 = [1, 1]  # 逆元テーブル
    inverse = [0, 1]  # 逆元テーブル計算用テーブル
    for i in range(2, N + 1):
        g1.append((g1[-1] * i) % mod)
        inverse.append((-inverse[mod % i] * (mod // i)) % mod)
        g2.append((g2[-1] * inverse[-1]) % mod)
    n, m, k = list(map(int, input().split()))
    nm = n * m % (10**9 + 7)
    a = (
        (cmb(nm - 2, k - 2, mod) % (10**9 + 7))
        * (nm * (m * (n**2 - 1) + n * (m**2 - 1)))
        // 6
    )
    print((a % (10**9 + 7)))


if __name__ == "__main__":
    main()

-def cmb(n, r, mod): -    if r < 0 or r > n: -        return 0 -    r = min(r, n - r) -    return g1[n] * g2[r] * g2[n - r] % mod +def main(): +    def cmb(n, r, mod): +        if r < 0 or r > n: +            return 0 +        r = min(r, n - r) +        return g1[n] * g2[r] * g2[n - r] % mod + +    mod = 10**9 + 7  # 出力の制限 +    N = 10**6 +    g1 = [1, 1]  # 元テーブル +    g2 = [1, 1]  # 逆元テーブル +    inverse = [0, 1]  # 逆元テーブル計算用テーブル +    for i in range(2, N + 1): +        g1.append((g1[-1] * i) % mod) +        inverse.append((-inverse[mod % i] * (mod // i)) % mod) +        g2.append((g2[-1] * inverse[-1]) % mod) +    n, m, k = list(map(int, input().split())) +    nm = n * m % (10**9 + 7) +    a = ( +        (cmb(nm - 2, k - 2, mod) % (10**9 + 7)) +        * (nm * (m * (n**2 - 1) + n * (m**2 - 1))) +        // 6 +    ) +    print((a % (10**9 + 7))) -mod = 10**9 + 7  # 出力の制限 -N = 10**6 -g1 = [1, 1]  # 元テーブル -g2 = [1, 1]  # 逆元テーブル -inverse = [0, 1]  # 逆元テーブル計算用テーブル -for i in range(2, N + 1): -    g1.append((g1[-1] * i) % mod) -    inverse.append((-inverse[mod % i] * (mod // i)) % mod) -    g2.append((g2[-1] * inverse[-1]) % mod) -n, m, k = list(map(int, input().split())) -nm = n * m % (10**9 + 7) -k = k % (10**9 + 7) -a = ( -    (cmb(nm - 2, k - 2, mod) % (10**9 + 7)) -    * (nm * (m * (n**2 - 1) + n * (m**2 - 1))) -    // 6 -) -print((a % (10**9 + 7))) +if __name__ == "__main__": +    main()