#include <bits/stdc++.h>
using namespace std;
long long int fact[2000005], ifact[2000005];
long long int ppow(long long int b, int p) {
  long long int ret = 1;
  for (; p; p /= 2) {
    if (p & 1) ret = (ret * b) % 1000000007;
    b = (b * b) % 1000000007;
  }
  return ret;
}
void init_fact() {
  fact[0] = 1;
  for (int i = 1; i < 2000005; i++) fact[i] = (fact[i - 1] * i) % 1000000007;
  ifact[2000005 - 1] = ppow(fact[2000005 - 1], 1000000007 - 2);
  for (int i = 2000005 - 2; i >= 0; i--)
    ifact[i] = (ifact[i + 1] * (i + 1)) % 1000000007;
}
int main() {
  init_fact();
  int n, m, g;
  scanf("%d%d%d", &n, &m, &g);
  long long int ans = 0;
  if (n == 0) {
    if (m == 1 and g == 1)
      ans = 1;
    else if (m > 1 and g == 0)
      ans = 1;
  } else if (m == 0) {
    if (n == 1 and g == 0)
      ans = 1;
    else if (n > 1) {
      if (n % 2 == 0 and g == 1)
        ans = 1;
      else if (n % 2 == 1 and g == 0)
        ans = 1;
    }
  } else {
    for (int start = 1; start <= n + 1; start++) {
      if (start == n + 1 and m == 1) {
        if (g == 0 and (n + m) % 2 == 0)
          ans++;
        else if (g == 1 and (n + m) % 2 == 1)
          ans++;
        continue;
      }
      if ((start + g) & 1) {
        long long int val = fact[m - 1 + n - start + 1];
        val = (val * ifact[m - 1]) % 1000000007;
        val = (val * ifact[n - start + 1]) % 1000000007;
        ans = (ans + val) % 1000000007;
      }
    }
  }
  cout << ans % 1000000007 << endl;
}
