#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);
}
int get_ans(int ones, int zeros, bool pre, bool wanted) {
  if (zeros < 0 || ones < 0) return 0;
  if (zeros == 0 && ones == 0) return wanted == pre;
  return get_ans(ones, zeros - 1, !pre, wanted) +
         get_ans(ones - 1, zeros, 0, wanted);
}
int main() {
  long long ones, zeros, target;
  cin >> zeros >> ones >> target;
  if (zeros == 0 && ones > 5) ones = (ones % 2) ? 3 : 4;
  if (ones == 0 && zeros > 5) zeros = (zeros % 2) ? 3 : 4;
  if (zeros + ones <= 5) {
    cout << get_ans(ones - 1, zeros, 1, target) +
                get_ans(ones, zeros - 1, 0, target);
    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;
}
