#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#include<string>
#include<queue>
#include<stack>
using namespace std;
#define MOD 1000000007
#define INF (1<<29)
#define EPS (1e-10)
typedef long long Int;
typedef pair<Int, Int> P;

#define max(x, y) ((x)>(y)?(x):(y))
#define min(x, y) ((x)<(y)?(x):(y))

Int mod_pow(Int x, Int a, Int m = MOD){
  if(a == 0)return 1;
  Int res = mod_pow(x, a / 2, m);
  res = res * res % m;
  if(a % 2)res *= x;
  return res % m;
}

Int inv(Int x, Int m = MOD){
  return mod_pow(x, m-2, m);
}

Int fact[10800000];
Int revfact[10800000];
Int rev[10800000];

void init(){
  Int m = MOD;
  fact[0] = 1;
  revfact[0] = 1;
  rev[0] = 0;
  rev[1] = 1;
  for(int i = 1;i < 10800000;i++){
    fact[i] = fact[i-1] * i % m;
    if(i>1)rev[i] = MOD / i * (MOD-rev[MOD % i]) % MOD;
    revfact[i] = revfact[i-1] * rev[i] % MOD;
  }
}

Int nCk(Int n, Int k){
  if(n < k)return 0;
  return fact[n] * revfact[n-k] % MOD * revfact[k] % MOD;
}



int main(){
  init();
  Int h, w, k, res = 0;
  cin >> h >> w >> k;
  for(int i = 0;i <= h;i++){
    int j = k - i;
    if(j < 0 || j > w)continue;
    Int tmp = 0;
    tmp += (k+1)*inv[3]%MOD*i%MOD*j%MOD;tmp %= MOD;
    tmp += (k+1)*inv[2]%MOD*(k)%MOD;tmp %= MOD;
    tmp += k;tmp %= MOD;
    tmp *= nCk(h, i) * nCk(w, j) % MOD;tmp %= MOD;
    res = (res + tmp) % MOD;
  }
  for(int i = 1;i <= k;i++)(res *= i) %= MOD;
  cout << res << endl;
  return 0;
}