#include "bits/stdc++.h"
#include <math.h>
#include <time.h>
using namespace std;
const long long mod = 1000000007;
#define ll long long
#define dump(x)                             \
    if (dbg) {                              \
        cout << #x << " = " << (x) << endl; \
    }
bool dbg = false;
long long gcd(long long a, long long b){
   if (a % b == 0)
   {
       return(b);
   }
   else
   {
       return(gcd(b, a % b));
   }
}
long long lcm(long long a, long long b){
   return (a / gcd(a, b))* b;
}
//---------------------------------------------------------------------------------------------------
/*ここからいじる*/
//---------------------------------------------------------------------------------------------------


ll n, a, b;

/*nCk*/
//nCkをmod(この例では10^9 + 7)で割った余りを求めるプログラム 下処理としてinit()を実行しておくこと
//---------------------------------------------------------------------------------------------------
//この例での制約はn < 10^6
vector<long long> f(200020);   //f.at(i): i!(をmodで割りながら求めたもの)
vector<long long> rf(200020);  //rf.at(i): 1/(i!)をmodで割りながら求めたもの
long long inv(long long x) {//ここでは逆元を求める
    long long res = 1;
    long long k = mod - 2;
    long long y = x;
    while (k) {//繰り返し二乗法を用いている
        if (k & 1) res = (res * y) % mod;//kが存在かつ値 k == 1
        y = (y * y) % mod;
        k /= 2;
    }
    return res;
}
void init() {//ここで
    f.at(0) = 1;
    for(long long i = 1; i < 200020; i++){
        f.at(i) = (f.at(i - 1) * i) % mod;
        rf.at(i) = inv(f.at(i));//逆元も同時にメモ
    }//n!をmodで割っていったものを求めている
}
//---------------------------------------------------------------------------------------------------
long long C(/*ll n, */ll k) {
    //long long a = f.at(n); // = n!%mod
    //long long b = rf.at(n - k); // = (n-k)!%mod
    if(k == 1){
        return 1;
    }
    long long c = rf.at(k); // = k!%mod

    //long long bc = (b * c) % mod;

    //return (a * bc) % mod;
    return c;
    /*if(n == 0 || n == k){
        return 1;
    }*/
}
//---------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------
/*modに対する逆元の計算*/
long long modinv(long long a, long long m) { //modの逆元を求める
    long long b = m, u = 1, v = 0;
    while (b) {
        long long t = a / b;
        a -= t * b; swap(a, b);
        u -= t * v; swap(u, v);
    }
    u %= m;
    if (u < 0) u += m;
    return u;
}
ll ninokaijo(ll n){
    if(n == 1){
        return 2;
    }
    else if(n == 0){
        return 1;
    }
    else if(n % 2 == 0){
        ll memo;
        memo = ninokaijo(n / 2);
        memo %= mod;
        memo = memo * memo;
        return memo;
    }
    else{
        ll memo;
        memo = ninokaijo(n - 1);
        memo %= mod;
        memo *= 2;
        memo %= mod;
        return memo;
    }
}
void solve(){
}
int main(){
    cin >> n >> a >> b;
    init();
    ll ans = ninokaijo(n);
    ans %= mod;
    ans--;//2^n-1
    ll A, B;//nCa, nCb
    A = 1;
    B = 1;
    for(ll i = 0; i < a; i++){
        A *= (n - i);
        A %= mod;
    }
    for(ll i = 0; i < b; i++){
        B *= (n - i);
        B %= mod;
    }
    A *= C(a);
    A %= mod;
    B *= C(b);
    B %= mod;
    ans -= A;
    ans += mod;
    ans %= mod;
    ans -= B;
    ans += mod;
    ans %= mod;
    cout << ans << endl;
    return 0;
}



Measured memory_bytes: 3328