#include <bits/stdc++.h>
using namespace std;
long long const mod = 1000000007;
long long bst = 1, mkm = 1;
long long Pow(long long base, long long power) {
  if (power <= 0) return 1;
  if (power % 2)
    return (base * Pow((base * base) % mod, power / 2) % mod) % mod;
  return (Pow((base * base) % mod, power / 2) % mod) % mod;
}
long long Div(long long x, long long y) {
  x = (x + mod * 100LL) % mod;
  y = (y + mod * 100LL) % mod;
  return (Pow(y, mod - 2) * x) % mod;
}
long long C(long long &sz, long long &oth, bool time = 0) {
  if (sz < 0 || sz < oth) return 0;
  if (1 == time) {
    for (long long i = sz, T = 1; i > oth; --i, T++) {
      bst = (bst * i) % mod;
      mkm = (mkm * T) % mod;
    }
    if (sz == 0) return 0;
    return Div(bst, mkm);
  }
  bst = Div(bst, sz * (sz - 1));
  mkm = Div(mkm, oth * (oth - 1));
  return Div(bst, mkm);
}
bool valid(string second, bool wanted) {
  bool b = second[0] - '0';
  for (int i = 1; i < (int)second.size(); ++i)
    if (!b && second[i] == '0')
      b = 1;
    else
      b = 0;
  return wanted == b;
}
int get_ans(string second, int ones, int zeros, int wanted, bool B) {
  if (zeros < 0 || ones < 0) return 0;
  if ((int)second.size() == wanted)
    if (ones == 0 && zeros == 0 && valid(second, B)) return 1;
  return get_ans(second + '0', ones, zeros - 1, wanted, B) +
         get_ans(second + '1', ones - 1, zeros, wanted, B);
}
int main() {
  long long ones, zeros, target;
  cin >> zeros >> ones >> target;
  if (zeros + ones <= 5) {
    cout << get_ans("", ones, zeros, ones + zeros, target);
    return 0;
  }
  if (zeros == 0) {
    if (target == 0 && ones > 0)
      cout << 1 << endl;
    else
      cout << 0 << endl;
    return 0;
  }
  if (ones == 0) {
    if (target == 0 && zeros % 2)
      cout << 1 << endl;
    else if (target && zeros % 2 == 0)
      cout << 1 << endl;
    else
      cout << 0 << endl;
    return 0;
  }
  long long tmpones = ones, tmpzeros = zeros;
  long long sz = ones + zeros - target - 1;
  zeros -= target;
  long long res = C(sz, zeros, 1);
  while (sz - 2 > 0 && ones > 0) {
    res = (res + C(sz, zeros)) % mod;
    sz -= 2, zeros -= 2;
  }
  if (tmpones == 1 && (tmpones + tmpzeros) % 2 && target) res++;
  if (tmpones == 1 && (tmpones + tmpzeros) % 2 == 0 && !target) res++;
  cout << res << endl;
  return 0;
}
