#include <bits/stdc++.h>
using namespace std;
long long int spf[10000001];
long long int modu = 1e9 + 7;
long long int modv = 998244353;
long long int fact[5005];
struct custom_hash {
  static uint64_t splitmix64(uint64_t x) {
    x += 0x9e3779b97f4a7c15;
    x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
    x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
    return x ^ (x >> 31);
  }
  size_t operator()(uint64_t x) const {
    static const uint64_t FIXED_RANDOM =
        chrono::steady_clock::now().time_since_epoch().count();
    return splitmix64(x + FIXED_RANDOM);
  }
};
long long int binpow(long long int a, long long int b, long long int m) {
  a %= m;
  long long res = 1;
  while (b > 0) {
    if (b & 1) res = res * a % m;
    a = a * a % m;
    b >>= 1;
  }
  return res;
}
long long int gcd(long long int a, long long int b) {
  return b ? gcd(b, a % b) : a;
}
long long int lcm(long long int a, long long int b) {
  return a / gcd(a, b) * b;
}
pair<long long int, long long int> fib(long long int n) {
  if (n == 0) return {0, 1};
  auto p = fib(n >> 1);
  long long int c = ((p.first % modu * ((2 * p.second % modu) % modu) % modu -
                      p.first % modu) %
                     modu) %
                    modu;
  long long int d = ((p.first % modu * p.first % modu) % modu +
                     (p.second % modu * p.second % modu) % modu) %
                    modu;
  if (n & 1)
    return {d % modu, (c % modu + d % modu) % modu};
  else
    return {c % modu, d % modu};
}
void calcfact() {
  fact[1] = 1;
  for (int i = 2; i <= 5004; i++) {
    fact[i] = (fact[i - 1] % modu * i) % modu;
  }
}
long long int modInverse(long long int a, long long int m) {
  long long int m0 = m;
  long long int y = 0, x = 1;
  if (m == 1) return 0;
  while (a > 1) {
    long long int q = a / m;
    long long int t = m;
    m = a % m, a = t;
    t = y;
    y = x - q * y;
    x = t;
  }
  if (x < 0) x += m0;
  return x;
}
void seive() {
  spf[1] = 1;
  for (int i = 1; i < 10000001; i++) spf[i] = i;
  for (int i = 2; i < 10000001; i = i + 2) spf[i] = 2;
  for (int i = 3; i * i < 10000001; i = i + 2) {
    if (spf[i] == i) {
      long long int j = i * i;
      while (j < 10000001) {
        if (spf[j] == j) spf[j] = i;
        j = j + i;
      }
    }
  }
}
void printvec(vector<long long int>& vec) {
  for (int i = 0; i < vec.size(); i++) cout << vec[i] << " ";
  cout << endl;
}
int solve() {
  long long int n;
  cin >> n;
  if (n == 1) {
    cout << 1 << endl;
    return 0;
  }
  if (n == 2) {
    cout << 3 << endl;
    return 0;
  }
  long long int dp[n + 1];
  dp[1] = 1;
  dp[2] = 2;
  long long int ans = 3;
  for (int i = 3; i <= n; i++) {
    dp[i] = (dp[i - 1] + dp[i - 2]) % modu;
    ans = (ans + dp[i]) % modu;
  }
  cout << ans << endl;
  return 0;
}
int main() {
  long long int t;
  t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
