#include <bits/stdc++.h>
using namespace std;
inline long long max(long long a, long long b) { return a > b ? a : b; }
inline long long min(long long a, long long b) { return a > b ? b : a; }
template <typename T>
inline int read(T& res) {
  long long x = 0, f = 1, flag = 0;
  char ch;
  flag = ch = getchar();
  if (flag == -1) return -1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    flag = ch = getchar();
    if (flag == -1) return -1;
  }
  while (ch >= '0' && ch <= '9' && flag != -1) {
    x = (x << 1) + (x << 3) + (ch ^ 48);
    flag = ch = getchar();
  }
  res = x * f;
  return flag;
}
template <typename T, typename... Args>
inline int read(T& t, Args&... a) {
  int res;
  res = read(t);
  if (res == -1) return -1;
  res = read(a...);
  return res;
}
const int maxn = 5511, mod = 1e9 + 9;
long long n, m, k;
long long qpow(long long x, long long y) {
  long long ans = 1;
  while (y) {
    if (y & 1) ans = (ans * x) % mod;
    y >>= 1;
    x = (x * x) % mod;
  }
  return ans % mod;
}
long long A1, A2, C1[maxn], C2[maxn], w, b;
inline void solve() {
  long long ans = 0, mx = max(w, b);
  A1 = A2 = 1;
  for (int i = 2; i <= w; i++) A1 = (A1 * i) % mod;
  for (int i = 2; i <= b; i++) A2 = (A2 * i) % mod;
  C1[2] = w - 1;
  C2[2] = b - 1;
  C1[1] = C2[1] = 1;
  for (int i = 3; i <= mx; i++) {
    long long inv = qpow(i - 1, mod - 2);
    C1[i] = (C1[i - 1] * (w - i + 1) % mod * inv) % mod,
    C2[i] = (C2[i - 1] * (b - i + 1) % mod * inv) % mod;
  }
  int lim = max(1, n - w);
  for (int x = min(n - 2, b); x >= lim; x--) {
    ans = (ans + (((((n - x - 1) * A1 % mod) * C1[n - x] % mod) * A2) % mod) *
                     C2[x]) %
          mod;
  }
  cout << ans << endl;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int t = 1;
  while (cin >> n >> w >> b) solve();
}
