#include <bits/stdc++.h>
using namespace std;
ifstream fin("a.in");
int n;
unsigned long long good, cnt[10], countFalse;
int vedic[10][10];
int getDigRoot(int x) {
  int s = 0;
  while (x > 0) {
    s += x % 10;
    x /= 10;
  }
  if (s >= 10) return getDigRoot(s);
  return s;
}
void initVedic() {
  int i, j;
  for (i = 1; i <= 9; i++) {
    for (j = 1; j <= 9; j++) {
      vedic[i][j] = getDigRoot(i * j);
    }
  }
}
int main() {
  cin >> n;
  int i, j;
  if (n < 10) {
    for (i = 2; i <= n; i++) {
      for (j = 2; j <= n; j++) {
        if (getDigRoot(i * j) <= n && i * j > 9) countFalse++;
      }
    }
    cout << countFalse;
    return 0;
  }
  initVedic();
  for (i = 1; i <= 9; i++) {
    cnt[i] = n / 9;
    if (i <= n % 9) cnt[i]++;
  }
  for (i = 1; i <= n; i++) {
    good += n / i;
  }
  for (i = 1; i <= 9; i++) {
    for (j = 1; j <= 9; j++) {
      countFalse += cnt[i] * cnt[j] * cnt[vedic[i][j]];
    }
  }
  countFalse -= good;
  cout << countFalse;
  return 0;
}
