#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int INF = 2e9;
const long long int LONGINF = 4e18;
long long int inv[200200], fct[200200], invfct[200200];
long long int c[2222];
long long int C(long long int n, long long int k) {
  return fct[n] * invfct[n - k] % mod * invfct[k] % mod;
}
void solve(int n) {
  int m, g;
  long long int c, ans = 0;
  scanf("%d%d", &m, &g);
  inv[1] = 1;
  fct[0] = 1;
  fct[1] = 1;
  invfct[0] = 1;
  invfct[1] = 1;
  for (int i = (2); i < (200200); i++) {
    inv[i] = -((long long int)mod / i * inv[mod % i] % mod) + mod;
    fct[i] = fct[i - 1] * i % mod;
    invfct[i] = invfct[i - 1] * inv[i] % mod;
  }
  if (m == 0) {
    if (n % 2 == 1 - g) {
      printf("1");
    } else {
      printf("0");
    }
    return;
  }
  c = C(n + m - 1, n);
  for (int i = 0; i < (n + 1); i++) {
    if (m == 1 && i == n) {
      if ((n + 1) % 2 == g) {
        ans++;
        ans %= mod;
      }
      continue;
    }
    if (i % 2 == g) {
      ans += c;
      ans %= mod;
    }
    c = c * inv[n + m - i - 1] % mod * (n - i) % mod;
    ;
  }
  printf("%I64d", ans);
}
int main() {
#pragma comment(linker, "/STACK:268435456")
  int n;
  long long int a;
  char c[200200];
  string s;
  while (scanf("%d", &n) == 1) solve(n);
  return 0;
}
