
object Main extends App {

  import scala.io.StdIn._
  import scala.math._

  val n = readLine.trim.toCharArray.map{_.asDigit}.toList
  val length = n.length
  implicit val memo = Array.tabulate(length + 1){_ ⇒ Array.tabulate(2){_ ⇒ Array.tabulate(2){_ ⇒ Array.tabulate(2){_ ⇒ None: Option[Long]}}}}

  println(
    count(n) + (3 until length).map{it ⇒ countWhole(it, false, false, false)}.sum
  )
  def count(digits: List[Int], useThree: Boolean = false, useFive: Boolean = false, useSeven: Boolean = false)(implicit memo: Array[Array[Array[Array[Option[Long]]]]]): Long = {
    digits match {
      case d::t ⇒
        (for (i ← List(3, 5, 7).filter(it ⇒ it <= d)) yield {
          if (d == i) count(t, useThree || i == 3, useFive || i == 5, useSeven || i == 7)
          else countWhole(t.length, useThree || i == 3, useFive || i == 5, useSeven || i == 7)
        }).sum
      case Nil if useThree && useFive && useSeven ⇒ 1L
      case _ ⇒ 0L
    }
  }
  def countWhole(digits: Int, useThree: Boolean, useFive: Boolean, useSeven: Boolean)(implicit memo: Array[Array[Array[Array[Option[Long]]]]]): Long = {
    if (digits != 0) {
      memo(digits)(if (useThree) 1 else 0: Int)(if (useFive) 1 else 0: Int)(if (useSeven) 1 else 0: Int) match {
        case Some(r) ⇒ r
        case None ⇒ (countWhole(digits - 1, true, useFive, useSeven) + countWhole(digits - 1, useThree, true, useSeven) + countWhole(digits - 1, useThree, useFive, true)).also{it ⇒
          memo(digits)(if (useThree) 1 else 0: Int)(if (useFive) 1 else 0: Int)(if (useSeven) 1 else 0: Int) = Some(it)
        }
      }
    }else {
      if (useThree && useFive && useSeven) 1L
      else 0L
    }
  }

  implicit class Extenion[T](val value :T){
    def also(func: T ⇒ Unit): T = {
      func(value)
      value
    }
    def let[R](func: T ⇒ R): R = func(value)
  }
}