#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define REP(i,n) for(int i=0,_n=(int)(n);i<_n;++i)
#define ALL(v) (v).begin(),(v).end()
#define CLR(t,v) memset(t,(v),sizeof(t))
template<class T1,class T2>ostream& operator<<(ostream& os,const pair<T1,T2>&a){return os<<"("<<a.first<<","<<a.second<< ")";}
template<class T>void pv(T a,T b){for(T i=a;i!=b;++i)cout<<(*i)<<" ";cout<<endl;}
template<class T>void chmin(T&a,const T&b){if(a>b)a=b;}
template<class T>void chmax(T&a,const T&b){if(a<b)a=b;}


int nextInt() { int x; scanf("%d", &x); return x;}

const ll MOD = 1000000007;
const int MAX_N = 312345;
ll inv[MAX_N];
ll fact[MAX_N];
ll fact_inv[MAX_N];

ll choose(int n, int r) {
  if (n < r) return 0;
  ll res = fact[n] * fact_inv[r] % MOD * fact_inv[n-r] % MOD;
  return res;
}

ll solve(int N, int a) {
  if (a == 0) return 1;
  ll res = choose(N+2*a, a) - choose(N+2*a, a-1);
  res = (res % MOD + MOD) % MOD;
  return res;
}

int main2() {
  int N = nextInt();
  int M = nextInt();
  int K = nextInt();

  ll ans = 0;
  for (int a = 0; a <= K; a++) {
    int b = K - a;
    ans += solve(N, a) * solve(M, b) % MOD * choose(N+M+2*a+2*b, N+2*a) % MOD;
    ans %= MOD;
  }
  cout << ans << endl;
  return 0;
}

int main() {
  inv[1] = 1;
  for (int i = 2; i < MAX_N; i++) inv[i] = inv[(int) (MOD % i)] * (MOD - MOD / i) % MOD;
  fact[0] = 1;
  for (int i = 1; i < MAX_N; i++) fact[i] = fact[i-1] * i % MOD;
  fact_inv[0] = 1;
  for (int i = 1; i < MAX_N; i++) fact_inv[i] = fact_inv[i-1] * inv[i] % MOD;

  for (;!cin.eof();cin>>ws)
    main2();
  return 0;
}

