Hyperoperation Golfing Introduction

In mathematics, the hyperoperation sequence is an infinite sequence of arithmetic operations (called hyperoperations) that starts with the unary operation of successor (n = 0), then continues with the binary operations of addition (n = 1), multiplication (n = 2), and exponentiation (n = 3), after which the sequence proceeds with further binary operations extending beyond exponentiation, using right-associativity.

(Source)

Challenge
Your challenge is code this sequence, given 3 inputs, n, a, and b, code a function such that $${\displaystyle H_{n}(a,b)={\begin{cases}b+1&amp;{\text{if }}n=0\\a&amp;{\text{if }}n=1{\text{ and }}b=0\\0&amp;{\text{if }}n=2{\text{ and }}b=0\\1&amp;{\text{if }}n\geq 3{\text{ and }}b=0\\H_{n-1}(a,H_{n}(a,b-1))&amp;{\text{otherwise}}\end{cases}}}$$
(Also from Wikipedia.)

Input
3 positive decimal integers, n, a, and b, taken from STDIN, function or command line arguments, in any order. Make sure to specify this in your answer

Output
The result of applying \$H_{n}(a,b)\$ with the inputs

Example inputs and outputs
Input: 0, 6, 3
Output: 4

Input: 4 5 2
Output: 3125

Restrictions

Your program/function should take input in base 10
Don't use any built in function that already provides H(n, a, b)
Standard loopholes apply


This is code-golf, so shortest code in bytes wins!
JavaScript (ES6),  49  47 bytes
Takes input as (a)(b,n).

a=&gt;g=(b,n)=&gt;n*b?g(g(b-1,n),n-1):-~[b,a-1,-1][n]

Try it online!
Commented
a =&gt;                  // main function taking a
  g = (b, n) =&gt;       // g = recursive function taking b and n
    n * b ?           // if neither n nor b is equal to 0:
      g(              //   go recursive:
        g(b - 1, n),  //     b = g(b - 1, n)
        n - 1         //     decrement n
      )               //   end of recursive call
    :                 // else:
      -~[             //   this is a leaf node:
        b,            //     if n = 0, return b + 1
        a - 1,        //     if n = 1, return (a - 1) + 1 = a
        -1            //     if n = 2, return -1 + 1 = 0
      ][n]            //     if n &gt; 2, return -~undefined = 1