#pragma region RegionDefs
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#include "boost/multi_array.hpp"
#define rep(i,n) for(int i=0,i##_len=(n);i<i##_len;++i)
#define reps(i,j,n) for(int i=(j),i##_len=(n);i<i##_len;++i)
#define repr(i,n) for(int i=(n);i>=0;--i)
#define all(x) begin(x),end(x)
using namespace std;
const int INF = 1e9;
template<class T=int> using P  = pair<T, T>;
template<class T=int> using V  = vector<T>;
template<class T=int> using PQ = priority_queue<T>;
template<class T=int> using PQG = priority_queue<T, V<T>, greater<T>>;
typedef long long ll;
const ll MOD = 1000000007LL;
void in() {}
template<class Head, class... Tail>
void in(Head&& head, Tail&&... tail)
{
    cin >> head;
    in(move(tail)...);
}
#define IN(...) ll __VA_ARGS__; in(__VA_ARGS__)

//時間が厳しいとき使う
#define INI(...) int __VA_ARGS__; in(__VA_ARGS__)
#define INS(T, ...) T __VA_ARGS__; in(__VA_ARGS__)
#define VIN(T, v, n) V<T> v(n); for(auto& _elem:v)cin>>_elem
template<class T>bool chmax(T &a, const T &b) {if (a<b) {a=b; return 1;} return 0;}
template<class T>bool chmin(T &a, const T &b) {if (a>b) {a=b; return 1;} return 0;}
#define y0 y__0
#define y1 y__1
#define j0 j__0
#define j1 j__1
#pragma endregion RegionDefs

using ll = long long;
template<ll mod = 1000000007>
struct Modint
{
    ll v;
    Modint() : v(0) {}
    Modint(ll a)
    {
        v = a % mod;
        if (v < 0) v = (v + (-v / mod + 1) * mod) % mod;
    }
    operator ll() const{ return v; }
    bool operator==(const Modint &x) const{ return v == x.v; }
	bool operator!=(const Modint &x) const{ return v != x.v; }
	Modint operator-() const{ return Modint(v ? (mod - v) : 0); }
	Modint operator+(const Modint &x) const{ return Modint(*this) += x; }
	Modint operator-(const Modint &x) const{ return Modint(*this) -= x; }
	Modint operator*(const Modint &x) const{ return Modint(*this) *= x; }
	Modint operator/(const Modint &x) const{ return Modint(*this) /= x; }
	Modint &operator+=(const Modint &x){
		v += x.v;
		if(v >= mod) v -= mod;
		return *this;
	}
	Modint &operator-=(const Modint &x){
		v -= x.v;
		if(v < 0) v += mod;
		return *this;
	}
	Modint &operator*=(const Modint &x){
		v = v * x.v % mod;
		return *this;
	}
	Modint &operator/=(const Modint &x){
		v = v * x.inv() % mod;
		return *this;
	}

	friend ostream &operator<<(ostream &os,const Modint &x)
    {
		return os << x.v;
	}
	friend istream &operator>>(istream &is, Modint &x)
    {
		ll t;
		is >> t;
		x = Modint(t);
		return is;
	}

	Modint pow(ll x) const
    {
		Modint res = 1, tmp = v;
		for(;x;tmp *= tmp,x >>= 1){
			if(x & 1) res *= tmp;
		}
		return res;
	}

    Modint inv() const
    {
        ll a = v, b = mod, c = 1, d = 0;
        while (b) {
            long long t = a / b;
            a -= t * b; swap(a, b);
            c -= t * d; swap(c, d);
        }
        c %= mod;
        if (c < 0) c += mod;
        return c;
    }
};
Modint<> operator"" _m (unsigned long long v) { return Modint<>(v); }

Modint<> nCr(ll n, ll r)
{
    Modint<> a = 1;
    rep(i, r) a = a * Modint<>(n - i) / Modint<>(i + 1);
    return a;
}

void solve()
{
    IN(n, a, b);
    ll s = 0;
    cout << (2_m).pow(n) - nCr(n, a) - nCr(n, b) - 1_m << endl;
}

int main()
{
    cin.tie(0); cout.tie(0);
    ios::sync_with_stdio(false);
    cout << setprecision(numeric_limits<double>::max_digits10);

    solve();

    return 0;
}

Measured memory_bytes: 256