#include <bits/stdc++.h>
using namespace std;
const int mod = (int)1e9 + 7;
int fact[200005];
int bigmod(long long a, long long p) {
  long long ret = 1;
  while (p) {
    if (p & 1) ret = ret * a % mod;
    a = a * a % mod;
    p >>= 1;
  }
  return ret;
}
int mod_add(long long a, long long b) {
  a += b;
  if (a >= mod) a -= mod;
  return a;
}
int mod_sub(long long a, long long b) {
  a -= b;
  if (a < 0) a += mod;
  return a;
}
int mod_mul(long long a, long long b) { return (a * b) % mod; }
int mod_div(long long a, long long b) { return mod_mul(a, bigmod(b, mod - 2)); }
int mod_power(int a, int b) {
  int res = 1;
  while (b > 0) {
    if (b & 1) {
      res = mod_mul(res, a);
    }
    a = mod_mul(a, a);
    b >>= 1;
  }
  return res;
}
void factorial() {
  fact[0] = 1;
  for (int i = 1; i < 200005; i++) fact[i] = mod_mul(fact[i - 1], i);
}
int nCr(int n, int r) {
  if (r > n) return 0;
  long long a = fact[n];
  long long b = mod_mul(fact[r], fact[n - r]);
  return mod_div(a, b);
}
int solve(int a, int b) {
  int x = fact[a], y = mod_mul(fact[b], fact[a - b]);
  return mod_div(x, y);
}
int main() {
  factorial();
  int i, j, m, n, g;
  cin >> n >> m >> g;
  if (m == 0) {
    if (n % 2 == !g)
      printf("1\n");
    else
      printf("0\n");
    return 0;
  } else if (n == 0) {
    if (m == 1) {
      if (g == 1)
        printf("1\n");
      else
        printf("0\n");
    } else if (g == 0)
      printf("1\n");
    else
      printf("0\n");
    return 0;
  }
  int flag = 0;
  int ans = 0;
  for (i = 0; i < n; i++) {
    if (flag == g) {
      int t = solve(n - i + m - 1, m - 1);
      ans = mod_add(ans, t);
    }
    flag = !flag;
  }
  if (m > 1) {
    if ((n + 1) % 2 == !g) ans = mod_add(ans, 1);
  } else {
    if ((n % 2) == !g) {
      ans = mod_add(ans, 1LL);
    }
  }
  printf("%d\n", ans);
  return 0;
}
