#include <bits/stdc++.h>
#define REP(i, n) for (int i = 0; i < (int)(n); ++i)

using namespace std;
using lint = long long;
template<class T = int> using V = vector<T>;

constexpr lint mod = 1e9 + 7;

lint pw(lint a, lint n) {
  lint res = 1;
  while (n) {
    if (n & 1) (res *= a) %= mod;
    n >>= 1;
    (a *= a) %= mod;
  }
  return res;
}
lint inv(lint a) { return pw(a, mod - 2); }

int main() {
  constexpr int L = 1 << 20;
  V<lint> fact(L + 1, 1);
  for (int i = 2; i <= L; ++i) {
    fact[i] = i * fact[i - 1] % mod;
  }
  V<lint> finv(L + 1);
  finv[L] = inv(fact[L]);
  for (int i = L; i >= 1; --i) {
    finv[i - 1] = finv[i] * i % mod;
  }
  auto comb = [&](int n, int r) -> lint {
    if (r < 0 or r > n) return 0;
    return fact[n] * finv[r] % mod * finv[n - r] % mod;
  };

  int n, m, k;
  cin >> n >> m >> k;
  lint res = 0;
  for (int x = 0; x <= k; ++x) {
    int y = k - x;
    lint crr = comb(n + m + 2 * k, n + 2 * x);
    (crr *= (n + 1) * fact[2 * x + n] % mod * finv[x] % mod * finv[x + n + 1] % mod) %= mod;
    (crr *= (m + 1) * fact[2 * y + m] % mod * finv[y] % mod * finv[y + m + 1] % mod) %= mod;
    (res += crr) %= mod;
  }
  cout << res << '\n';
}
