UNIQUE(range) returns each different value or row once, in the order it first appears. In Sheets, UNIQUE tells upper and lower case apart: "harbor cafe" and "Harbor Cafe" both appear. Excel's UNIQUE treats them as one.
SORT(range, sort_column, is_ascending) returns the rows of a range in order. sort_column is a column number inside the range (1 is its first column), and is_ascending is TRUE for A to Z or smallest first, FALSE for the reverse. Add more pairs to break ties: SORT(B2:E19, 1, TRUE, 4, FALSE). Blank cells go to the end either way.
Functions can wrap each other: SORT(UNIQUE(C2:C19)) gives the distinct products A to Z.
SORTN(range, n, display_ties_mode, sort_column, is_ascending) sorts and keeps only the first n rows, which is how you build a top 3. Set the ties mode to 0 for exactly n rows.
All of these spill, so leave room below and to the right of the formula.